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