使用参数时出现Django URL错误

使用参数时出现Django URL错误,django,django-urls,Django,Django Urls,我是Django的新手,所以我预计会有一定程度的混乱,但是我认为这一个很有趣,所以我对以下内容感到困惑,我有链接a和链接B(两者都做相同的事情) url.py url(r'^testing/([\w\s-].+)/(?P<id>[0-9]+)$', 'testapp.views.test_view', name='test'), url(r'^testing/([\w\s-].+)/(?P[0-9]+)$,'testapp.views.test_view',name='test')

我是Django的新手,所以我预计会有一定程度的混乱,但是我认为这一个很有趣,所以我对以下内容感到困惑,我有链接a和链接B(两者都做相同的事情)

url.py

url(r'^testing/([\w\s-].+)/(?P<id>[0-9]+)$', 'testapp.views.test_view', name='test'),
url(r'^testing/([\w\s-].+)/(?P[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]+)$']
异常类型:NoReverseMatch
找不到参数“('8','109404')”和关键字参数“{}”的“test”的反转。尝试了1个模式:[“测试/([\\w\\s-])/(?P[0-9]+)$”]
我尝试封装参数,仔细检查传递的数据,甚至尝试通过链接A和B传递相同的数据


有人有同样的问题吗?我遗漏了什么?

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

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

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

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

@Jason定义“没有工作”。你有回溯吗?因为你的参数有时与你的url模式不匹配。不正确,例如:我通过了/somename/01,它有时有效,有时无效。此外,如果我将模板上的动态URL更改为静态,则每次都有效。如果我将模板上的动态URL更改为静态(它每次都有效),请显示回溯、视图,以及可能有助于我们帮助您的任何内容。