Django框架之正则表达式URL误区

Posted Aliase

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于Django框架之正则表达式URL误区的主要内容,如果未能解决你的问题,请参考以下文章

Django 框架之 URL

python 之 Django框架(路由系统include命名URL和URL反向解析命名空间模式)

30Python之web框架django进阶篇

Django之 路由系统

Django之路由系统

python--django之url控制器