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<>,尖括号中是参数名字,然后同完全匹配一样,在视图函数中要有同名的参数进行传递,这里就不用同完全匹配那样指定类型了

  • 相关阅读:
    LA 2038 Strategic game(最小点覆盖,树形dp,二分匹配)
    UVA 10564 Paths through the Hourglass(背包)
    Codeforces Round #323 (Div. 2) D 582B Once Again...(快速幂)
    UVALive 3530 Martian Mining(贪心,dp)
    UVALive 4727 Jump(约瑟夫环,递推)
    UVALive 4731 Cellular Network(贪心,dp)
    UVA Mega Man's Mission(状压dp)
    Aizu 2456 Usoperanto (贪心)
    UVA 11404 Plalidromic Subsquence (回文子序列,LCS)
    Aizu 2304 Reverse Roads(无向流)
  • 原文地址:https://www.cnblogs.com/alantammm/p/13921580.html
Copyright © 2011-2022 走看看