Django urls.py 中的正则表达式
Posted
技术标签:
【中文标题】Django urls.py 中的正则表达式【英文标题】:regex in Django urls.py 【发布时间】:2012-07-22 05:54:45 【问题描述】:请帮我修复 urls.py 人们建议这样,但它对我不起作用......
#urls.py
(r'^/user/(?P<username>)/subject/([\w|\W]+)/$', subject),
#template
% for subject in subjects %
<li><a href="/user/ user.username /subject/ subject.name "> subject.name </a> del_form.delete </li>
% endfor %
#error
PAGE NOT FOUND
Request URL: http://127.0.0.1:8000/user/root/subject/Math%20140
....
....
^/user/(?P<username>)/subject/([\w|\W]+)/$
【问题讨论】:
我不了解 django,但您的正则表达式要求 URL 以/
结尾,而您的测试 URL (127.0.0.1....MATH%20140) 不以 /
结尾。您可以将其设为可选或将其删除。此外,[\w|\W]+
应该是[\w\W]+
,因为|
在[]
中没有任何意义。 (那为什么不只做.+
呢?你在[\w\W]
中包含新行,而.
没有)
在某种程度上,这也取决于是否设置了多行标志(m),我认为不是。第二个问题可能是 URL 是 url 编码的,而主题可能不是。
Django 默认添加斜杠到 URL。 url 编码问题可能最好通过添加不包含空格等的主题 slug 或使用 the slugify
filter (并尝试在视图中反转 - 可能最好只添加实际的 SlugField
以避免困难那里)。
@Dougal 这是个好建议!
【参考方案1】:
您的正则表达式有误。如果您对此不熟悉,则应该使用正则表达式生成器:
http://ryanswanson.com/regexp/ (Perl)
http://www.pyregex.com/ (Python)
我想你想要这样的东西:
^user/(?P<username>.+)/subject/([\w|\W]+)/
但您可能希望将“.+”更改为更具限制性的内容:
^user/(?P<username>[^/]+)/subject/([\w|\W]+)/
还请注意,由于 Django 将初始 URL 提供给 URL 调度程序的方式,您可能不希望使用前导斜杠。
【讨论】:
以上是关于Django urls.py 中的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章