day18-django 正則URL 匹配


一、引子

  在day17 作業中,我們查看主機詳細信息的時候,是通過 在url 中拼接,傳參數。urls 中匹配  path("detail/",views.detail)

這樣url 變成類似  http://127.0.0.1:8000/detail/?nid=2  今天我們來學習,類似 http://127.0.0.1:8000/detail-3.html 這樣的URL

據說,以前我們使用的方式 ,在seo 時候算是動態頁面,后面這種方式算靜態頁面。可能在做搜索優化的時候有好處吧。

二、開搞栗子

  忽略掉數據庫,先在 views 新建一個用戶字典

  2.1 動態頁面的栗子

    views 代碼:

  

 1 info_dic={
 2     1:{"name":"zhangsan","email":"zhangsan@163.com","age":22},
 3     2:{"name":"lisi","email":"lisi@163.com","age":27},
 4     3:{"name":"wangwu","email":"wangwu@163.com","age":29},
 5     4:{"name":"laoliu","email":"laoliu@163.com","age":30},
 6     5:{"name":"chenpi","email":"chenpi@163.com","age":32},
 7 }
 8 
 9 def index(request):
10     return render(request,"index.html",{"info_dic":info_dic})
11 
12 
13 def detail(request):
14     nid=request.GET.get("nid")
15     print(nid,type(nid))
16     info=info_dic.get(int(nid))
17     print(info)
18     return render(request,"detail.html",{"info":info})

    urls

  

  前端,index.html,

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8     <h1>用戶信息</h1>
 9 
10     <ul>
11         {% for k,v in info_dic.items %}
12             <li><a target="_blank" href="/detail/?nid={{ k }}">{{ v.name }}</a></li>
13         {% endfor %}
14 
15     </ul>
16 
17 
18 
19 </body>
20 </html>

  前端,detail

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8     <h1>用戶詳細信息</h1>
 9 
10     <ul>
11         <li>name:{{ info.name }}</li>
12         <li>email:{{ info.email }}</li>
13         <li>age:{{ info.age }}</li>
14     </ul>
15 </body>
16 </html>

  結果:

2.2 下面用 正則表達式來 搞URL 匹配,靜態頁面,

  urls

  views ,

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

 

  結果

上面的栗子中,我們得知參數是通過形參傳遞的,類似定義函數的形參數,

  下面再搞一個栗子驗證

 

 

參數位置變換后 ,獲取的數值也變了

 

三、分組傳參

  在上面的栗子中,我們知道如果不分組,那么參數就是類似函數的位置參數,靠天吃飯,

很顯然,這樣不方便我們在實際的使用中去調用。那么使用關鍵字參數呢,在URL 匹配中就需要分組

下面搞栗子,變換nid,uid 位置之后,打印的結果是一樣的。

位置參數可以在 *arg 中獲取,關鍵字參數可以在 **kwargs 中獲取

四、總結

路由系統:URL

  1. 普通url:re_path('^index/',view.index),re_path('^home/',view.Home.as_view())
  2. 順序傳參:re_path(r'^detail-(\d+)-(\d+).html/',views.detail),這個用*args接收
  3. 關鍵字傳參:re_path(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html/',views.detail),這個用**kwargs接收,推薦使用這個

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM