正则表达式对大家来说应该都不陌生, 下面这篇文章主要给大家介绍了关于 Django 框架教程之正则表达式 URL 误区的相关资料, 文中通过示例代码介绍的非常详细, 需要的朋友可以参考借鉴, 下面随着小编来一起学习学习吧
前言
利用 Django 开发网站, 可以设计出非常优美的 url 规则, 如果 url 的匹配规则 (包含正则表达式) 组织得比较好, view 的结构就会比较清晰, 比较容易维护但这其中可能会有一些误区, 下面就来给大家总结下
问题:
我学习的视频大概是 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" rel="external nofollow" >{{ 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
来源: http://www.phperz.com/article/18/0227/363220.html