命名组可以使用命名的正则表达式组来捕获 URL 中的值并以关键字参数的方式传递给视图函数。
在 Python 正则表达式中,命名正则表达式组的语法是 (?P<name>pattern)
,其中 name 是组的名称,pattern 是要匹配的模式。
例子, urls.py
如下:
urlpatterns = [
…………
# 捕获一个 test/ 后面接上4个数字的 url
# 并把这4个数字作为 test 视图函数的关键字参数 year
url(r'^test/(?P<year>[0-9]{4})/$', test),
]
视图函数,views.py
如下:
from django.http.response import HttpResponse
# 上面 url 的最后四个数字作为关键字参数 year 被传入到视图函数 test 中
def test(request, year):
return HttpResponse('年份:' + year)
打开:http://127.0.0.1:8000/test/2016/ ,就能看到 url 上的值 2016。
我们也可以有多个命名组,比如同时在 url 中传递年份和月份参数:
url(r'^test/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', test),
指定视图参数的默认值
编写 url.py:
urlpatterns = [
…………
url(r'^test/$', test),
url(r'^test/(?P<year>[0-9]{4})/$', test),
]
编写视图函数 views.py:
def test(request, year='2000'):
return HttpResponse('年份:' + str(year))
当访问:http://127.0.0.1:8000/test/ 时候,year 的值将会是默认值 '2000'。