Django路由系统
1.11版本官方文档正则表达式
URL配置就像是Django项目的目录,它的本质是URL与URL调用的函数之间的映射表,Django会根据URL配置,在遇到一个URL时,就去执行相应的函数。django
URLconf配置
基本格式
from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图,参数,别名), ]
【示例】浏览器
from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), ]
参数说明
- 正则表达式:对应一个字符串形式正则表达式
- views视图:一个可调用的函数,一般是一个视图函数
- 参数:可选项,字典形式,要传递给视图函数的默认参数
- 别名:可选项,name参数
2.0版本中的路由系统的写法
from django.urls import path,re_path urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<int:year>/', views.year_archive), path('articles/<int:year>/<int:month>/', views.month_archive), path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail), ] 2.0版本中的re_path和1.11版本的url用法相同
正则表达式概述
基本配置
urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), ]
注意事项
- urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则再也不继续;
- 若要从URL中捕获一个值,只须要用()将值包括起来便可(分组匹配);
- 不须要添加一个前导的反斜杠,由于每个URL都有一个,好比:应该是^articles 而不是 ^/articles;
- 每一个正则表达式前面的r都是可选项,可是建议加上。
补充说明
Django settings.py配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为 APPEND_SLASH = True。 其做用就是自动在网址结尾加'/',在浏览器访问的地址后面不为/时,会自动跳转至带有/的路径的配置项。app
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^jjzz/$', views.Index.as_view()), url(r'^fileupload/$', views.Upload.as_view()), ]
如上段代码所示,当咱们访问访问 http://www.example.com/jjzz
时,默认状况下,Django会自动在网址后补加一个/
,转换成http://www.example.com/jjzz/
,以下图函数
若是是在settings中设置了APPEND_SLASH=False,再请求 http://www.example.com/jjzz
就会提示找不到页面。(所用格url为笔者举例使用!)url