django url位置參數(shù)傳遞到view函數(shù)

位置參數(shù)是指我們在uri的路徑中將數(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

查看控制臺輸出

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封裝后的請求數(shù)據(jù),args, **kwargs接收的就是uri中的數(shù)據(jù),至于怎么發(fā)送數(shù)據(jù)給視圖函數(shù),那就是urls部分的定義了

urls中當(dāng)前僅用了最基本的正則匹配,匹配年月日的信息,注意這次的匹配沒有key-value的對應(yīng)關(guān)系。當(dāng)用戶的請求到該匹配項(xiàng)的時候,匹配項(xiàng)會對uri的每一層進(jìn)行對應(yīng)層的正則數(shù)據(jù)匹配,匹配完成后將數(shù)據(jù)給到view的視圖中。
根據(jù)上邊的例子,urls最后的調(diào)用函數(shù)應(yīng)該是
index(request,"2018","06","05")

捕獲位置參數(shù),在url定義的正則表達(dá)式中將要傳遞的數(shù)據(jù)用()括起來就好,括號內(nèi)填寫匹配數(shù)據(jù)的正則表達(dá)式。
比如url(r'^hello/([0-9]{4})/含義就是對用戶訪問url http://xxx/hello/對這里的數(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然后訪問吧,訪問后看控制臺的輸出

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ù)的時候有了k-v的數(shù)據(jù)格式
根據(jù)上邊的例子,urls最后的調(diào)用函數(shù)應(yīng)該是
index(request,year="2018",month="06",day="05")

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容