Django:带有url标记和不区分大小写的URL的NoReverseMatch

时间:2013-05-27 07:18:31

标签: regex django django-templates

TLDR; {%url%}标记有效。 r'(?i)^ ... $'url路径有效。他们不能一起工作?

我想使用反向URL解析(通过url模板标记),但出于任何原因,似乎与不区分大小写的url正则表达式(即前缀为“(?i)”的正则表达式不兼容)。为澄清这一点:

urls.py:

...
urlpatterns = patterns('',
    url(r'^$', home, name='home'),
    ...
)
...

base_path.html

<a href="{% url home %}">Users</a>

但是这会导致NoReverseMatch错误:

urls.py:

...
urlpatterns = patterns('',
    url(r'(?i)^$', home, name='home'),
    ...
)
...

具体来说,我得到:

NoReverseMatch at /p/blah/users/
  Reverse for 'home' with arguments '()' and keyword arguments '{}' not found.
  Request Method:   GET
  Request URL:  http://localhost:8000/p/blah/users/
  Django Version:   1.4.3
  Exception Type:   NoReverseMatch
  Exception Value:  
    Reverse for 'home' with arguments '()' and keyword arguments '{}' not found.
  Exception Location: .../local/lib/python2.7/site-packages/django/template/defaulttags.py in render, line 424
  Python Executable:    .../bin/python
  Python Version:   2.7.3

任何想法A)为什么会发生这种情况,和/或B)解决url模板标签或不区分大小写的url正则表达式?我已经使用了许多其他url路径重现了这种行为 - 所有这些都通过删除“(?i)”前缀来修复(尽管我们确实需要不区分大小写)。

1 个答案:

答案 0 :(得分:4)

Django url模式似乎需要你在^锚之后放置regexflags。

url(r'^(?i)$', home, name='home'),