url配置
无名分组
urlpatterns = [
url(r‘^index/‘, views.index),
url(r‘^books/(\d{4})/‘, views.books),#无名分组 (\d{4})
]
def books(request,year):#这里的year对应的就是(\d{4})正则匹配出来的数据
# print(year)
return HttpResponse(year)
位置参数
urlpatterns = [
url(r‘^index/‘, views.index),
url(r‘^books/(\d{4})/(\d[1,2])/‘, views.year_month_books), # 无名分组 匹配年份的
url(r‘^books/(\d{4})/$‘, views.year_books),#无名分组 匹配年份+月份 $符号的作用是防止匹配不到月份,完全匹配的作用
]
视图
def year_books(request, year):
return HttpResponse(year)
def year_month_books(request, year, month):
return HttpResponse(year + month)
#位置参数 第一个参数接收的就是无名分组路径中匹配的第一个分组的数据,第二个参数接收的就是无名分组路径中匹配的第二个分组的数据
有名分组
url(r‘^books/(?P<year>\d{4})/(?P<month>\d[1,2])/‘, views.year_month_books),
#视图里面的函数形参名称要和url中的分组名对应好,参数位置没有眼球
注意:
- urlpatterns中的元素书写顺序从上往下逐一匹配正则表达式,一旦匹配成功,就不再继续匹配
- 如要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)
- 不需要添加一个前导的反斜杠(也就是写在正则前面的那个/),因为每个url都有 例如,应该是artices而不是/artices
- 每个正则表达式前面的‘r‘都建议加上
- ^artices& 以什么结尾 ,以什么开头,严格限制路径
APPEND_SLASH=False
配置的意思是最后面加/跟不加/的区别,浏览器默认的是True,如果访问的时候不加/,Django会自动加上斜杠再请求一遍,想等于两边请求.如果这个参数改为False,如果请求的时候不加/,则会报错
所以一般在urls中写的时候一般最后加上/
url(r‘^index/‘, views.index),
视图函数添加默认参数
def year_month_books(request, year=‘10‘):
return HttpResponse(year)