Django正則URL匹配實(shí)現(xiàn)流程解析
一、引子
在day17 作業(yè)中,我們查看主機(jī)詳細(xì)信息的時(shí)候,是通過 在url 中拼接,傳參數(shù)。urls 中匹配 path("detail/",views.detail)

這樣url 變成類似 http://127.0.0.1:8000/detail/?nid=2 今天我們來學(xué)習(xí),類似http://127.0.0.1:8000/detail-3.html 這樣的URL
據(jù)說,以前我們使用的方式 ,在seo 時(shí)候算是動態(tài)頁面,后面這種方式算靜態(tài)頁面。可能在做搜索優(yōu)化的時(shí)候有好處吧。
二、開搞栗子
忽略掉數(shù)據(jù)庫,先在 views 新建一個用戶字典
2.1 動態(tài)頁面的栗子
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>用戶信息</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>用戶詳細(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á)式來 搞URL 匹配,靜態(tài)頁面,
urls

views ,
直接在函數(shù)中傳參數(shù),nid 形式參數(shù)。不像之前需要自己到 reques.method 中去取

結(jié)果

上面的栗子中,我們得知參數(shù)是通過形參傳遞的,類似定義函數(shù)的形參數(shù),
下面再搞一個栗子驗(yàn)證




參數(shù)位置變換后 ,獲取的數(shù)值也變了

三、分組傳參
在上面的栗子中,我們知道如果不分組,那么參數(shù)就是類似函數(shù)的位置參數(shù),靠天吃飯,
很顯然,這樣不方便我們在實(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),這個用*args接收
- 關(guān)鍵字傳參:re_path(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html/',views.detail),這個用**kwargs接收,推薦使用這個
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Django路由層URLconf作用及原理解析
- django下創(chuàng)建多個app并設(shè)置urls方法
- 解決django的template中如果無法引用MEDIA_URL問題
- Django {{ MEDIA_URL }}無法顯示圖片的解決方式
- django ListView的使用 ListView中獲取url中的參數(shù)值方式
- Django模板標(biāo)簽中url使用詳解(url跳轉(zhuǎn)到指定頁面)
- Django url,從一個頁面調(diào)到另個頁面的方法
- django 通過url實(shí)現(xiàn)簡單的權(quán)限控制的例子
- Django項(xiàng)目主urls導(dǎo)入應(yīng)用中views的紅線問題解決
- Django URL參數(shù)Template反向解析
相關(guān)文章
Python進(jìn)程池Pool應(yīng)用實(shí)例分析
這篇文章主要介紹了Python進(jìn)程池Pool應(yīng)用,結(jié)合實(shí)例形式分析了Python進(jìn)程池Pool功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-11-11
pygame學(xué)習(xí)筆記(2):畫點(diǎn)的三種方法和動畫實(shí)例
這篇文章主要介紹了pygame學(xué)習(xí)筆記(2):畫點(diǎn)的三種方法和動畫實(shí)例,本文講解了單個像素(畫點(diǎn))、連接多個點(diǎn)形成線、引用圖像、動畫完整實(shí)例,需要的朋友可以參考下2015-04-04
解析Python中的eval()、exec()及其相關(guān)函數(shù)
本篇文章主要介紹了解析Python中的eval()、exec()及其相關(guān)函數(shù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12
在Python中使用filter去除列表中值為假及空字符串的例子
今天小編就為大家分享一篇在Python中使用filter去除列表中值為假及空字符串的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
Python+flask編寫一個簡單實(shí)用的自動排班系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何基于Python+flask編寫一個簡單實(shí)用的自動排班系統(tǒng),文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下2025-03-03
TensorFlow安裝及jupyter notebook配置方法
下面小編就為大家?guī)硪黄猅ensorFlow安裝及jupyter notebook配置方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
python 簡單照相機(jī)調(diào)用系統(tǒng)攝像頭實(shí)現(xiàn)方法 pygame
今天小編就為大家分享一篇python 簡單照相機(jī)調(diào)用系統(tǒng)攝像頭實(shí)現(xiàn)方法 pygame,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08

