Url 模板标签引发 NoReverseMatch 错误,但生成的 url 是正确的

Url template tag raises NoReverseMatch error but the generated url is correct

我无法使用 {% url %} 在 Django 模板中生成 urls。我收到以下错误:

Reverse for 'category' with arguments '()' and keyword arguments '{'category_name_slug': ''}' not found. 1 pattern(s) tried: ['rango/category/(?P<category_name_slug>[\w\-]+)/$']

这是我使用标签的方式:

{% url 'rango:category' category_name_slug=category.slug %}

这是相对的 url() 定义:

url(r'^category/(?P<category_name_slug>[\w\-]+)/$', views.category, name='category')

有趣的是,如果我使用 category.id 而不是 slug 它就可以工作,但是当然生成的 url 没有太多类别,因为"slug",视图中不应包含 id。

如果我用这个标签就更陌生了

 {% url 'rango:category' category_name_slug=category.slug as slug %}
 {{ slug }}

那么生成 url 是正确的,没有出现错误。

阅读错误似乎没有任何内容作为关键字参数传递。

有什么想法吗?

错误信息的关键部分是

'{'category_name_slug': ''}' 

这暗示您没有将类别正确传递给模板,或者您的类别没有设置 slug。

你说使用 category.id 不会导致错误,这意味着你正确地将类别传递给模板。

因此您可能有一个没有 slug 集的类别。检查数据库中的值。