码迷,mamicode.com
首页 > Web开发 > 详细

django notes 二:URL dispatcher

时间:2015-08-02 11:39:17      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

一般在 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}))

 

django notes 二:URL dispatcher

标签:

原文地址:http://www.cnblogs.com/lesliefang/p/4695350.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!