一般在 settings.py 中会有一个 ROOT_URLCONF ,请求到来时 django 会从 ROOT_URLCONF 指向的文件中查找 urlpatterns 变量配置的路由。
urlpatterns 中还可以 include 其它 model 中的 urlpatterns, django 会从上到下一个一个查找,看 url 是否匹配。 匹配后就交给对应的 view 处理了。
urlpatterns = [ url(r‘^admin/‘, include(admin.site.urls)), url(r‘^index/$‘, view_index), url(r‘^blog/‘, include(blog_urls)), ]
url 中的非命名捕获组在 view 中以位置参数接收, 其实接收的是元组,你用 *args 接收是一样的, 元组会自动解包到对应的位置
urlpatterns = [ url(r‘^articles/([0-9]{4})/$‘, views.year_archive), url(r‘^articles/([0-9]{4})/([0-9]{2})/$‘, views.month_archive), ]
def month_archive(request, year, month): pass
命名捕获组以关键字参数接收, 其实接收的是一个字典,字典会自动解包到对应的字段中,你用 **kw 接收然后自己解也是一样的
urlpatterns = [ url(r‘^articles/(?P<year>[0-9]{4})/$‘, views.year_archive), url(r‘^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$‘, views.month_archive), ]
def month_archive(request, year, month): pass
所有的参数都以字符串来接收,不论你正则中的类型是什么 (Captured arguments are always strings)
这个地方在开发中遇到好几回坑,后台rpc接口接收的是整形,而我传的是字符串,导致排序不正确,还以为是rpc接口有问题,水平太菜。
重写默认的 404 500 界面, 只要在 ROOT_URLCONF 中给 django.conf.urls.handler404 赋值一个自定义 view 就行了
django.conf.urls.handler404 = view_404 django.conf.urls.handler500 = view_500
Reverse url , 要 reverse 得先给 url 起个名字
非命名参数 reverse
urlpatterns = [ url(r‘^articles/([0-9]{4})/$‘, view_articles, name=‘article‘) ] print(reverse(‘article‘, args=(2015,)))
命名参数 reverse
def view_articles(request, year): return HttpResponse(content=‘hello world‘) urlpatterns = [ url(r‘^articles/(?P<year>[0-9]{4})/$‘, view_articles, name=‘article‘) ] print(reverse(‘article‘, kwargs={‘year‘: 2018}))
时间: 2024-10-24 19:04:14