URLconf
用戶通過在瀏覽器的地址欄中輸入網(wǎng)址請求網(wǎng)站晤锥,對于Django開發(fā)的網(wǎng)站,由哪一個視圖進行處理請求吼渡,是由url匹配找到的蛤肌。
在settings.py文件中通過ROOT_URLCONF指定根級url的配置
urlpatterns是一個url()實例的列表
一個url()對象包括:
?????????????? (1)? 正則表達式
?????????????? (2)? 視圖函數(shù)
?????????????? (3)? 名稱name
編寫URLconf的注意:
??????????? 若要從url中捕獲一個值,需要在它周圍設(shè)置一對圓括號
?????? ? ?? 不需要添加一個前導(dǎo)的反斜杠瘤礁,如應(yīng)該寫作'test/'阳懂,而不應(yīng)該寫作'/test/'
??????????? 每個正則表達式前面的r表示字符串不轉(zhuǎn)義
請求的url被看做是一個普通的python字符串,進行匹配時不包括get或post請求的參數(shù)及域名
只匹配?? “/python/1/”? 部分
正則表達式非命名組柜思,通過位置參數(shù)傳遞給視圖
url(r'^([0-9]+)/$', views.detail, name='detail'),
正則表達式命名組岩调,通過關(guān)鍵字參數(shù)傳遞給視圖,本例中關(guān)鍵字參數(shù)為id
url(r'^(?P[0-9]+)/$', views.detail, name='detail'),
參數(shù)匹配規(guī)則:優(yōu)先使用命名參數(shù)赡盘,如果沒有命名參數(shù)則使用位置參數(shù)
每個捕獲的參數(shù)都作為一個普通的python字符串傳遞給視圖
性能:urlpatterns中的每個正則表達式在第一次訪問它們時被編譯号枕,這使得系統(tǒng)相當快
包含其它的URLconfs
在應(yīng)用中創(chuàng)建urls.py文件,定義本應(yīng)用中的urlconf陨享,再在項目的settings中使用include()
from django.conf.urls import include, url
urlpatterns = [
??????? url(r'^', include('booktest.urls', namespace='booktest')),
]
匹配過程:先與主URLconf匹配葱淳,成功后再用剩余的部分與應(yīng)用中的URLconf匹配
在sesstings.py中的配置:
url(r'^booktest/', include('booktest.urls', namespace='booktest')),
在booktest應(yīng)用urls.py中的配置
url(r'^([0-9]+)/$', views.detail, name='detail'),
匹配部分是:/booktest/1/
匹配過程:在settings.py中與“booktest/”成功钝腺,再用“1/”與booktest應(yīng)用的urls匹配
使用include可以去除urlconf的冗余
參數(shù):視圖會收到來自父URLconf、當前URLconf捕獲的所有參數(shù)
在include中通過namespace定義命名空間赞厕,用于反向解析(后面介紹反向解析)