位置參數(shù)是指我們?cè)趗ri的路徑中將數(shù)據(jù)通過url傳遞給視圖函數(shù)的一種方式蛹找,先看段代碼呀闻,然后我們分析下傳遞的過程
urls部分
urlpatterns = [
url(r'^hello/([0-9]{4})/([0-9]{2})/([0-9]{2})',index),
]
view部分
def index(request, *args, **kwargs):
print(args)
return HttpResponse("hello")
用戶訪問的url
http://10.89.0.5:8000/mytest/hello/2018/06/05
查看控制臺(tái)輸出
System check identified no issues (0 silenced).
June 05, 2018 - 12:29:20
Django version 1.11.13, using settings 'reboot_dj.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
('2018', '06', '05')
以上的代碼塊挺尾,我們首先看view部分的,這里我們看到在我們定義的視圖函數(shù)中接收request和*args, *kwargs幾種數(shù)據(jù)赚抡,那么request接收是被django封裝后的請(qǐng)求數(shù)據(jù)蠢甲,args, **kwargs接收的就是uri中的數(shù)據(jù)掷匠,至于怎么發(fā)送數(shù)據(jù)給視圖函數(shù)滥崩,那就是urls部分的定義了
urls中當(dāng)前僅用了最基本的正則匹配,匹配年月日的信息讹语,注意這次的匹配沒有key-value的對(duì)應(yīng)關(guān)系钙皮。當(dāng)用戶的請(qǐng)求到該匹配項(xiàng)的時(shí)候,匹配項(xiàng)會(huì)對(duì)uri的每一層進(jìn)行對(duì)應(yīng)層的正則數(shù)據(jù)匹配募强,匹配完成后將數(shù)據(jù)給到view的視圖中株灸。
根據(jù)上邊的例子,urls最后的調(diào)用函數(shù)應(yīng)該是
index(request,"2018","06","05")
捕獲位置參數(shù)擎值,在url定義的正則表達(dá)式中將要傳遞的數(shù)據(jù)用()括起來就好,括號(hào)內(nèi)填寫匹配數(shù)據(jù)的正則表達(dá)式逐抑。
比如url(r'^hello/([0-9]{4})/
含義就是對(duì)用戶訪問url http://xxx/hello/對(duì)這里的數(shù)據(jù)進(jìn)行匹配
OK 上邊的例子是傳遞沒有key-value數(shù)據(jù)的例子鸠儿,如果想要給view函數(shù)傳遞有k-v的數(shù)據(jù)怎么玩呢?稍稍修改下url信息
view部分
def index(request, *args, **kwargs):
print(kwargs)
return HttpResponse('hello')
urls部分
urlpatterns = [
url(r'^hello/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})',index),
]
ok然后訪問吧,訪問后看控制臺(tái)的輸出
System check identified no issues (0 silenced).
June 05, 2018 - 12:58:15
Django version 1.11.13, using settings 'reboot_dj.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
{'year': '2018', 'month': '06', 'day': '00'}
可以看到厕氨,我們urls給視圖函數(shù)傳遞數(shù)據(jù)的時(shí)候有了k-v的數(shù)據(jù)格式
根據(jù)上邊的例子进每,urls最后的調(diào)用函數(shù)應(yīng)該是
index(request,year="2018",month="06",day="05")