Django之路由系統(URL)
阿新 • • 發佈:2019-01-25
URL配置(URLconf)就像Django 所支撐網站的目錄。它的本質是URL模式以及要為該URL模式呼叫的檢視函式之間的對映表;你就是以這種方式告訴Django,對於這個URL呼叫這段程式碼,對於那個URL呼叫那段程式碼。
在Django2.0以下的版本中,其格式為
urlpatterns = [
url(正則表示式, views檢視函式,引數,別名),
]
引數說明:- 一個正則表示式字串
- 一個可呼叫物件,通常為一個檢視函式或一個指定檢視函式路徑的字串
- 可選的要傳遞給檢視函式的預設引數(字典形式)
- 一個可選的name引數
在Django2.0以上的版本中需要from django.urls import re_path才能進行正則表達
from django.urls import path,re_path
其格式為
urlpatterns = [
path('表示式',view檢視函式,引數,別名),
re_path('正則表示式',view檢視函式,引數,別名)
]
urlpatterns = [ re_path('article/[0-9]{4}',views.article_year), #這種形式不會把引數傳給檢視函式 re_path('article/([0-9]{4})',views.article_year), #當正則表示式加上括號時,會將匹配到的字串傳給檢視函式,其形參可以任意 re_path('article/(?P<year>[0-9]{4})',views.article_year), #(?P<name>)為匹配到的字串命名,然後傳給檢視函式,且檢視函式的形參必須是相應的name ]
起別名是為了如果需要更改正則表示式,那麼所以的相關引用都需要更改,但是如果用別名作為引用,只要別名不便,其他地方也無需變動。
其中正則表示式與之前一樣,但是path還有用法,如
基本規則:urlpatterns = [ re_path('article/(?P<year>[0-9]{4}$)',views.article_year), path('article/<int:year>/<int:month>',views.article_month), path('article/<int:year>/<int:month>/<slug>',views.article_detail), path('register',views.register,name='reg') ]
- 使用尖括號(<>)從url中捕獲值。
- 會將捕獲到的值傳給檢視函式,形參必須與命名一樣。
- 捕獲值中可以包含一個轉化器型別(converter type),比如使用 <int:name> 捕獲一個整數變數。若果沒有轉化器,將匹配任何字串,當然也包括了 / 字元。
- 無需新增前導斜槓。
Django預設支援以下5個轉化器:
- str,匹配除了路徑分隔符(/)之外的非空字串,這是預設的形式
- int,匹配正整數,包含0。
- slug,匹配字母、數字以及橫槓、下劃線組成的字串。
- uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
- path,匹配任何非空字串,包含了路徑分隔符
路由分發
實際上每個應用都應該有一個URLs檔案來進行url配置,而不是都放在主目錄的URLs中。
所以我們應該為每個應用建立相應的urls檔案,匯入在主目錄的urls檔案中include
from django.urls import path,re_path,include
以blog應用為例
urlpatterns = [
path('admin/', admin.site.urls),
path('show_time/',views.show_time),
re_path('^blog/',include('blog.urls')),
]
注意最後一個表示所有blog相關的url配置都在自己的urls配置檔案中查詢。