1. 程式人生 > >Django之路由系統(URL)

Django之路由系統(URL)

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配置檔案中查詢。