使用参数的Django URL错误

时间:2016-01-20 22:22:03

标签: django django-urls

我是Django的新手,所以我希望会有一些混乱,但是我认为这个很有趣所以我对以下内容感到困惑,我有链接A和链接B(都做同样的事情)......

urls.py

url(r'^testing/([\w\s-].+)/(?P<id>[0-9]+)$', 'testapp.views.test_view', name='test'),

模板页面

<a href="{% url 'test' i.name i.id %}">{{i.name}}</a>
<a href="{% url 'test' i.name i.id %}">{{i.name}}</a>

链接A通过,而链接B产生以下错误:

Exception Type: NoReverseMatch

Reverse for 'test' with arguments '('8', '109404')' and keyword arguments '{}' not found. 1 pattern(s) tried: ['test/([\\w\\s-].+)/(?P<id>[0-9]+)$']

我已经尝试封装参数,仔细检查传递的数据,我甚至尝试通过链接A和B传递相同的数据。

是否有同样的问题?我错过了什么?

1 个答案:

答案 0 :(得分:0)

问题在于您的第一个捕获组:

r'([\w\s-].+)'

这里首先是一个没有量词的字符集:[\w\s-]。这匹配单个字符。然后你有一个带有+量词的点(任何字符),即一个或多个。这意味着您至少需要两个字符:一个匹配[\w\s-],一个或多个匹配.+

你可能想要捕获第一个字符集一次或多次,即:

r'([\w\s-]+)'