django 2.0路由配置變化

 

urlpatterns變量​​的語法

urlpatterns應該是path()和/或re_path()實例的Python列表。html

  1. 首先,Django會使用根路由解析模塊(root URLconf)來解析路由。 一般,這是ROOT_URLCONF設置的值,可是若是傳入的HttpRequest對象具備urlconf屬性(由中間件設置)那麼ROOT_URLCONF的設置將被其替換。
  2. Django加載該Python模塊並查找變量urlpatterns。 它應該是django.urls.path()或者django.urls.re_path()實例的Python列表。

path 是新的方法,re_path方法和原來的url用法一致,使用正則表達式
代碼:

from django.urls import path

from . import views

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),
]
 

變化:python

  不在使用url函數,轉而使用path轉換器正則表達式

 

  直接在url中表示捕獲的參數類型,django

 

  提取的參數會進行類型轉換,不像正則表達式中都是捕獲字符串函數

 

  不以斜槓結尾則匹配不到ui



  • 要從URL捕獲某個值,使用尖角括號。
  • 捕獲的值能夠選擇包含一個轉換器類型。 例如, 使用 <int:name> 來捕獲一個整形參數。 若是沒有包含轉換器, 那麼除了/ 字符外, 會匹配任意字符串。
  • /articles/2005/03/ 的請求將與列表中的第三個條目匹配。 Django會調用函數views.month_archive(request, year=2005, month=3)
  • /articles/2003 不會匹配到任何一個模式,由於每一個模式都要求URL以斜槓結尾。

 

轉換器類型如下路徑轉換器默承認用:url

  • str - 匹配除了路徑分隔符'/'的任意非空字符串。 若是表達式中沒有包含轉換器,那麼這將是默認行爲。
  • int - 匹配0或任意正整數。 並做爲 int 返回。
  • slug - 匹配任意的黏接字符串(slug string),這些黏接字符串是ASCII的字母或數字,詞與詞之間由連字符或下劃線黏接組成。 例如, building-your-1st-django-site
  • uuid - 匹配一個格式化的 UUID. 爲了防止多個URL映射到同一頁面,必須包含多個破折號(dash),同時字母必須小寫。 例如, 075194d3-6885-417e-a8a8-6c931e272f00返回一個 UUID 實例。
  • path - 匹配包含路徑分隔符 '/'在內的任意非空字符串。 相對於str,這容許你匹配一個完整的URL路徑,而不單單是URL路徑的一部分。
相關文章
相關標籤/搜索