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='http://www.intensediesel.com/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í)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. xml中的空格之完全解說(shuō)2. ASP中解決“對(duì)象關(guān)閉時(shí),不允許操作。”的詭異問(wèn)題……3. 得到XML文檔大小的方法4. ASP使用MySQL數(shù)據(jù)庫(kù)的方法5. WMLScript的語(yǔ)法基礎(chǔ)6. ASP動(dòng)態(tài)網(wǎng)頁(yè)制作技術(shù)經(jīng)驗(yàn)分享7. msxml3.dll 錯(cuò)誤 800c0019 系統(tǒng)錯(cuò)誤:-2146697191解決方法8. html小技巧之td,div標(biāo)簽里內(nèi)容不換行9. XML入門(mén)的常見(jiàn)問(wèn)題(四)10. ASP中if語(yǔ)句、select 、while循環(huán)的使用方法
