• Django框架教程之正则表达式URL误区详解


    问题:我学习的视频大概是2015年录的,里面用的Django版本比较老关于正则表达式URL这一块都是用的url(“url(r'^admin/', admin.site.urls),”)方法。而我自己练习的时候是下载的最新版本,而正则表达式URL用的确实path(“path('admin/', admin.site.urls),”)方法。刚开始一对以匹配的时候都能成功,就没太在意这个细节。直到后面正则匹配多个时(path('detail-(d+).html', views.detail),),总是报错“page not found”。我检查了好几遍,明明一模一样怎么就不行尼?其实看颜色就感觉有点不太对,但又不知道是什么原因。后来查了相关版本文档之后,终于找到解决的方法了!

    下面附上相关代码:

    1.这个是最重要的py文件,其他的就差不多了。

    2.其他相关代码:

    views.py

    def detail(request,nid):
        # print(nid)
        # return HttpResponse(nid)
        detail_info = USER_DICT[nid]
        return render(request,'detail.html',{'detail_info':detail_info})

    index.html

    复制代码
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <ul>
            {% for k,v in user_dict.items %}
                <li><a target="_blank" href="/detail-{{ k }}.html">{{ v.name }}</a></li>
            {% endfor %}
        </ul>
    </body>
    </html>
    复制代码

    detail.py

    复制代码
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1>详细信息</h1>
        <h6>用户名:{{ detail_info.name }}</h6>
        <h6>邮箱:{{ detail_info.email }}</h6>
    </body>
    </html>
    复制代码

    另外,URL要传递多个数据时候,严格按照顺序传递的,并且函数定义必须有相应个数的参数,当然可以利用万能参数接收任意个参加

    普通情况下运用的正则表达式是:url(r'^detail-(?P<nid>d+)-(?P<uid>d+)', views.detail),

    而对应的detail函数的是这样的:def detail(request, *args, **kwargs):pass

  • 相关阅读:
    写在开始前表单数据校验
    Redis之时间轮机制(五)
    Reids高性能原理(六)
    redis持久化之RDB (七)
    Redis的使用(二)
    redisson之分布式锁实现原理(三)
    redis主从复制(九)
    Redis的内存淘汰策略(八)
    Redis之Lua的应用(四)
    《长安的荔枝》读书笔记
  • 原文地址:https://www.cnblogs.com/Justin-Tim/p/10053259.html
Copyright © 2020-2023  润新知