Django之路由
Django的路由系统
Django的路由系统就是URL调度程序(就是一个Python模块),URL配置(URLconf)就是Django所支撑网站的目录.
它的本质是URL模式(简单正则表达式)与Python函数(视图函数)之间的映射.
URLconf配置
基本格式
from django.conf.urls import url urlpatterns = [ # url(正则表达式,views视图,参数,别名), ]
参数说明:
- 正则表达式 : 一个正则表达式字符串
- views视图 : 一个可调用对象,通常为一个视图函数
- 参数 : 可选的要传递给视图函数的默认参数(字典形式)
- 别名 : 一个可选的name参数
示例:
from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), ]
注意:
Django 2.0版本中的路由系统是下面的写法(官方文档):
from django.urls import path,re_path urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<int:year>/', views.year_archive), ]
2.0版本中re_path和1.11版本的url是一样的用法。
正则表达式详解
基本配置
from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^blog/[0-9]{4}', views.year), ]
url地址:
分组命名分配
from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^blog/([0-9]{4})', views.year), ]
结果:
所以要在视图函数中加上分组对应的参数:
from django.shortcuts import render,HttpResponse def year(request,y): return HttpResponse('ok')
上面的示例使用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值,并以位置参数形式传递给视图.
在更高级的用法中,可以使用分组命名匹配的正则表达式来捕获URL中的值,并以关键字参数形式传递给视图.
在Python的正则表达式中,分组命名正则表达式组的语法是(?P<name>pattern),其中name是组的名称,pattern是要匹配的模式.