zoukankan      html  css  js  c++  java
  • django_路由匹配

    path:完全匹配

    存在如下demo:

    #urls.py
    path(r'articles/<year>/<int:month>/<slug:slug>/',views.special)
    
    #views.py
    
    def special(request,year,month,slug):
        return HttpResponse('year:%s'%year)

    如上,浏览器中输入:http://127.0.0.1:8000/articles/1d/23/xx/  页面展示 year:1d

    其中year没有指定类型,所以可以输入1d,如果month字段不是整型,则404,参数传递要用尖括号括起来,然后在对应的视图函数中,需要传递对应的尖括号中的参数名字。

    所有类型限制如下:

    1. str:匹配任何非空字符串,但不含斜杠/,如果你没有专门指定转换器,默认使用该转换器
    2. int:匹配0和正整数,返回一个int类型
    3. slug:可理解为注释、后缀、附属等概念,是url拖在最后的一部分解释性字符。该转换器匹配任何ASCII字符以及连接符和下划线,比如building-your-1st-django-site
    4. uuid:匹配一个uuid格式的对象。为了防止冲突,规定必须使用破折号,所有字母必须小写,例如075194d3-6885-417e-a8a8-6c931e272f00。返回一个UUID对象;
    5. path:匹配任何非空字符串,重点是可以包含路径分隔符’/‘。这个转换器可以帮助你匹配整个url而不是一段一段的url字符串。要区分path转换器和path()方法。

    re_path url:正则匹配

    django 2.0以上的版本中推荐使用url,而且url返回的就是一个re_path

    from django.conf.urls import url
    demo如下:
    #urls.py
    url(r'^articles/[0-9]{4}/$', views.reg_view),
    url(r'^(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$',views.special),
    
    
    #views.py
    def special(request,year,month,slug):
        return HttpResponse('year:%s'%year)
    
    def reg_view(request):
        return HttpResponse('路由正则匹配成功')

    第一条url中没有传递参数,直接使用正则表达式进行匹配,如果输入的满足该表达式,则对应视图中的reg_view逻辑

    第二条url中传递了参数,对某一个参数需要用圆括号括起来,然后加上?P<>,尖括号中是参数名字,然后同完全匹配一样,在视图函数中要有同名的参数进行传递,这里就不用同完全匹配那样指定类型了

  • 相关阅读:
    写在读ng之前的基础知识----笔记
    angularJS中-$route路由-$http(ajax)的使用
    angular学习-入门基础
    grunt使用watch和livereload的Gruntfile.js的配置
    jQuery1.4源码解读
    Handlebars的使用方法文档整理(Handlebars.js)
    zepto源代码解读
    CentOS 安装rz和sz命令
    Linux下*.tar.gz文件解压缩命令
    Linux下用rm删除的文件的恢复方法
  • 原文地址:https://www.cnblogs.com/alantammm/p/13921580.html
Copyright © 2011-2022 走看看