• Django路由之url分组(命名)匹配


    分组(命名)匹配

    urls.py路由配置文件中:

    urlspatterns中想捕获正则表达式匹配的结果用来出传递给views.py视图函数文件使用,需要用到分组匹配,或者使用第三个参数python字典进行传参。

    无名分组:(正则)

    位置参数:匹配出的结果按顺序依次传递给视图函数的形参(形参必须有序,匹配值按位置顺序进行传递)

    有名分组:(?P<name>正则)

    关键字参数:匹配出的结果按照命名对应传递给视图函数的形参(形参可以无序,匹配值按命名进行传递)

    urls.py

    from django.conf.urls import url 

    from . import views 

    urlpatterns = [

        url(r'^articles/2003/$', views.special_case_2003),

    #注意正则匹配出来的内容是字符串,即便是你在url里面写的是2003数字,匹配出来之后也是字符串

    url(r'^articles/(d{4})/$', views.year_archive),

    #year_archive(request,n),小括号为分组,有分组,那么这个分组得到的用户输入的内容,就会作为对应函数的位置参数传进去,别忘了形参要写两个了,明白了吗?

        url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),

    #某年的,(?P<year>[0-9]{4})这是命名参数(正则命名匹配还记得吗?),那么函数year_archive(request,year),形参名称必须是year这个名字。而且注意如果你这个正则后面没有写$符号,即便是输入了月份路径,也会被它拦截下拉,因为它的正则也能匹配上

        url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),#某年某月的

        url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),

    #某年某月某日的

    ]

     

     

    views.py

    views.py中视图函数的写法:

    第一个参数必须是request,后面跟的三个参数是对应着上面分组命名正则匹配的每个参数,位置可以随意

    def article_detail(request,month,day,year):

        return HttpResponse(year+month+day)

     

    正则匹配捕获参数和视图函数参数:

    视图函数的参数规则与普通函数参数规则一致,在url()映射中可以接受第三个参数python字典当做关键字参数传递给视图函数
     

  • 相关阅读:
    CJB的大作
    OI省选算法汇总
    bzoj1078【SCOI2008】斜堆
    zrt中文题
    bzoj4726【POI2017】Sabota?
    bzoj4591 【Shoi2015】超能粒子炮·改
    bzoj2086【Poi2010】Blocks
    bzoj2091【Poi2010】The Minima Game
    bzoj2038小z的袜子
    bzoj4282慎二的随机数列
  • 原文地址:https://www.cnblogs.com/open-yang/p/11182916.html
Copyright © 2020-2023  润新知