URLconf
- 在settings.py文件中通過ROOT_URLCONF指定根級url的配置
- urlpatterns是一個url()實例的列表
- 一個url()對象包括:
- 編寫URLconf的注意:
- 若要從url中捕獲一個值,需要在它周圍設置一對圓括號
- 不需要添加一個前導的反斜杠,如應該寫作'test/',而不應該寫作'/test/'
- 每個正則表達式前面的r表示字符串不轉義
- 請求的url被看做是一個普通的python字符串,進行匹配時不包括get或post請求的參數及域名
url(r'^([0-9]+)/$', views.detail, name='detail'),
- 正則表達式命名組,通過關鍵字參數傳遞給視圖,本例中關鍵字參數為id
url(r'^(?P<id>[0-9]+)/$', views.detail, name='detail'),
- 參數匹配規則:優先使用命名參數,如果沒有命名參數則使用位置參數
- 每個捕獲的參數都作為一個普通的python字符串傳遞給視圖
- 性能:urlpatterns中的每個正則表達式在第一次訪問它們時被編譯,這使得系統相當快
包含其它的URLconfs
- 在應用中創建urls.py文件,定義本應用中的urlconf,再在項目的settings中使用include()
from django.conf.urls import include, url
urlpatterns = [
url(r'^', include('booktest.urls', namespace='booktest')),
]
- 匹配過程:先與主URLconf匹配,成功后再用剩余的部分與應用中的URLconf匹配
請求http://www.xxx.cn/booktest/1/
在sesstings.py中的配置:
url(r'^booktest/', include('booktest.urls', namespace='booktest')),
在booktest應用urls.py中的配置
url(r'^([0-9]+)/$', views.detail, name='detail'),
匹配部分是:/booktest/1/
匹配過程:在settings.py中與“booktest/”成功,再用“1/”與booktest應用的urls匹配
- 使用include可以去除urlconf的冗余
- 參數:視圖會收到來自父URLconf、當前URLconf捕獲的所有參數
- 在include中通過namespace定義命名空間,用於反解析
URL的反向解析
- 如果在視圖、模板中使用硬編碼的鏈接,在urlconf發生改變時,維護是一件非常麻煩的事情
- 解決:在做鏈接時,通過指向urlconf的名稱,動態生成鏈接地址
- 視圖:使用django.core.urlresolvers.reverse()函數
- 模板:使用url模板標簽