主要内容:
1 : 发请求http://127.0.0.1:8000/home/1234/12, 后面不用写/的原因
Django会帮我们自动跳转到http://127.0.0.1:8000/home/1234/12/页面, 不是浏览器自动帮我们添加的.
可以不帮我们自动添加/, 在setting中设置APPEND_SLASH = False, 默认为true自动添加
2 分组和分组命名
url(r'^group/[0-9]{4}/([0-9]{2})/$', views.group), # 分组 url(r'^group_name/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.group_name), # 分组命名
views里的代码:
# 分组匹配 def group(request, month):分组会传来一个参数, 所以加一个位置参数 print(month) return HttpResponse('ok') # 命名分组 def group_name(request, *args, **kwargs): print(args) print(kwargs) #year 和 month相当于关键字参数 year = kwargs.get('year') 只能写year和month month = kwargs.get('month') print(year, month) return HttpResponse('ok')
3 include其他的URLconfs
from django.conf.urls import url, include # 一定要导入include from django.contrib import admin urlpatterns = [ url(r'^admin/$', admin.site.urls), url(r'app01/', include('app01.urls')), #可以包含其他的urlconfs文件 ]
4 给视图添加参数, 会替换原来的值
url(r'^group_name/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.group_name, {'year': 2018}), # 分组命名 url(r'^group_name/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.group_name), # 分组命名
结论: 无论写什么年份, 都会被2018替换
5 命名URL, 和 URL反向解析
1. 命名:
from django.urls import reverse
url(r'^press_list/', views.press_list, name='press_list'),给我的url匹配模式起名为press_list
url(r'^press_list/', views.press_list, name='press_list')
2. 反向解析:
在视图函数中的写法: reverse('press_list')
在模板中的写法: {% url 'press_list'%}
结论: 如果改变我的匹配模式, 可以通过name 方向解析出该匹配模式, 此时就不用修改用到该网址的地方.