Django路由配置之正则表达式详解
正则表达式详解
urls.py
1 from django.conf.urls import url 2 3 4 5 from . import views 6 7 8 9 urlpatterns = [ 10 11 url(r'^articles/2003/$', views.special_case_2003), 12 13 #思考:如果用户想看2004、2005、2006....等,你要写一堆的url吗,是不是在articles后面写一个正则表达式/d{4}/就行啦,网址里面输入127.0.0.1:8000/articles/1999/试一下看看 14 15 url(r'^articles/([0-9]{4})/$', views.year_archive), 16 17 url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), 18 19 #思考,如果你想拿到用户输入的什么年份,并通过这个年份去数据库里面匹配对应年份的文章,你怎么办?怎么获取用户输入的年份啊,分组/(\d{4})/,一个小括号搞定 20 21 url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), 22 23 ]
views.py
views.py中视图函数的写法:
第一个参数必须是request,后面跟的三个参数是对应着上面分组正则匹配的每个参数,必须按顺序对应
def article_detail(request,year,month,day):
return HttpResponse(year+month+day)
注意事项
1. urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续。
2. 若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。
3. 不需要添加一个前导的反斜杠(也就是写在正则最前面的那个/),因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
4. 每个正则表达式前面的'r' 是可选的但是建议加上。
5. ^articles$ 以什么结尾,以什么开头,严格限制路径
补充说明
# 是否开启URL访问地址后面不为'/'跳转至带有'/'的路径的配置项
APPEND_SLASH=True
Django settings.py配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为 APPEND_SLASH = True。 其作用就是自动在网址结尾加'/'。其效果就是:我们定义了urls.py:
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^blog/$', views.blog),
]
访问http://www.example.com/blog时,默认将网址自动转换为http://www.example/com/blog/。
如果在settings.py中设置了 APPEND_SLASH=False,此时我们再请求http://www.example.com/blog时就会提示找不到页面。