Django正則URL匹配實(shí)現(xiàn)流程解析
一、引子
在day17 作業(yè)中,我們查看主機(jī)詳細(xì)信息的時(shí)候,是通過(guò) 在url 中拼接,傳參數(shù)。urls 中匹配 path("detail/",views.detail)
這樣url 變成類(lèi)似 http://127.0.0.1:8000/detail/?nid=2 今天我們來(lái)學(xué)習(xí),類(lèi)似http://127.0.0.1:8000/detail-3.html 這樣的URL
據(jù)說(shuō),以前我們使用的方式 ,在seo 時(shí)候算是動(dòng)態(tài)頁(yè)面,后面這種方式算靜態(tài)頁(yè)面??赡茉谧鏊阉鲀?yōu)化的時(shí)候有好處吧。
二、開(kāi)搞栗子
忽略掉數(shù)據(jù)庫(kù),先在 views 新建一個(gè)用戶(hù)字典
2.1 動(dòng)態(tài)頁(yè)面的栗子
views 代碼:
info_dic={ 1:{"name":"zhangsan","email":"zhangsan@163.com","age":22}, 2:{"name":"lisi","email":"lisi@163.com","age":27}, 3:{"name":"wangwu","email":"wangwu@163.com","age":29}, 4:{"name":"laoliu","email":"laoliu@163.com","age":30}, 5:{"name":"chenpi","email":"chenpi@163.com","age":32}, } def index(request): return render(request,"index.html",{"info_dic":info_dic}) def detail(request): nid=request.GET.get("nid") print(nid,type(nid)) info=info_dic.get(int(nid)) print(info) return render(request,"detail.html",{"info":info})
urls
前端,index.html,
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <h1>用戶(hù)信息</h1> <ul> {% for k,v in info_dic.items %} <li><a target="_blank" href="/detail/?nid={{ k }}" rel="external nofollow" >{{ v.name }}</a></li> {% endfor %} </ul> </body> </html>
前端,detail
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <h1>用戶(hù)詳細(xì)信息</h1> <ul> <li>name:{{ info.name }}</li> <li>email:{{ info.email }}</li> <li>age:{{ info.age }}</li> </ul> </body> </html>
結(jié)果:
2.2 下面用 正則表達(dá)式來(lái) 搞URL 匹配,靜態(tài)頁(yè)面,
urls
views ,
直接在函數(shù)中傳參數(shù),nid 形式參數(shù)。不像之前需要自己到 reques.method 中去取
結(jié)果
上面的栗子中,我們得知參數(shù)是通過(guò)形參傳遞的,類(lèi)似定義函數(shù)的形參數(shù),
下面再搞一個(gè)栗子驗(yàn)證
參數(shù)位置變換后 ,獲取的數(shù)值也變了
三、分組傳參
在上面的栗子中,我們知道如果不分組,那么參數(shù)就是類(lèi)似函數(shù)的位置參數(shù),靠天吃飯,
很顯然,這樣不方便我們?cè)趯?shí)際的使用中去調(diào)用。那么使用關(guān)鍵字參數(shù)呢,在URL 匹配中就需要分組
下面搞栗子,變換nid,uid 位置之后,打印的結(jié)果是一樣的。
位置參數(shù)可以在 *arg 中獲取,關(guān)鍵字參數(shù)可以在 **kwargs 中獲取
四、總結(jié)
路由系統(tǒng):URL
- 普通url:re_path('^index/',view.index),re_path('^home/',view.Home.as_view())
- 順序傳參:re_path(r'^detail-(\d+)-(\d+).html/',views.detail),這個(gè)用*args接收
- 關(guān)鍵字傳參:re_path(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html/',views.detail),這個(gè)用**kwargs接收,推薦使用這個(gè)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Django路由層URLconf作用及原理解析
- django下創(chuàng)建多個(gè)app并設(shè)置urls方法
- 解決django的template中如果無(wú)法引用MEDIA_URL問(wèn)題
- Django {{ MEDIA_URL }}無(wú)法顯示圖片的解決方式
- django ListView的使用 ListView中獲取url中的參數(shù)值方式
- Django模板標(biāo)簽中url使用詳解(url跳轉(zhuǎn)到指定頁(yè)面)
- Django url,從一個(gè)頁(yè)面調(diào)到另個(gè)頁(yè)面的方法
- django 通過(guò)url實(shí)現(xiàn)簡(jiǎn)單的權(quán)限控制的例子
- Django項(xiàng)目主urls導(dǎo)入應(yīng)用中views的紅線問(wèn)題解決
- Django URL參數(shù)Template反向解析
相關(guān)文章
Python實(shí)現(xiàn)PDF掃描件生成DOCX或EXCEL功能
這篇文章主要介紹了如何利用Python實(shí)現(xiàn)將PDF掃描件轉(zhuǎn)為DOCX或EXCEL文件格式功能,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下2022-03-03Python實(shí)現(xiàn)身份證號(hào)碼解析
本文給大家匯總介紹下使用Python實(shí)現(xiàn)身份證號(hào)碼驗(yàn)證解析的幾個(gè)方法,有需要的小伙伴可以參考下。2015-09-09tkinter動(dòng)態(tài)顯示時(shí)間的兩種實(shí)現(xiàn)方法
這篇文章主要介紹了tkinter動(dòng)態(tài)顯示時(shí)間的兩種實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01win10系統(tǒng)配置GPU版本Pytorch的詳細(xì)教程
這篇文章主要介紹了win10系統(tǒng)配置GPU版本Pytorch,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04如何從Python字符串中刪除最后一個(gè)分號(hào)或者逗號(hào)
這篇文章主要介紹了從?Python?中的字符串中刪除最后一個(gè)分號(hào)或者逗號(hào)的兩種方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04python實(shí)現(xiàn)畫(huà)出e指數(shù)函數(shù)的圖像
今天小編就為大家分享一篇python實(shí)現(xiàn)畫(huà)出e指數(shù)函數(shù)的圖像,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11