zoukankan      html  css  js  c++  java
  • 【转】django 正则URL 匹配

    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接收,推荐使用这个
  • 相关阅读:
    oracle执行计划相关
    RENAME方法进行分区改造
    在线重定义方法进行分区改造
    SYSAUX表空间如何清理
    Linux7安装Oracle 11g 86%报错:Error in invoking target 'agent nmhs' of makefile
    存储过程收集统计信息ORA-20000报错解决记录
    GIT-远程仓库
    GIT-本地仓库
    Python-DDT实现接口自动化
    Python-DDT框架
  • 原文地址:https://www.cnblogs.com/yoyo008/p/10882769.html
Copyright © 2011-2022 走看看