添加slug到URL时出现NoReverseMatch错误
我刚接触Django和Python,希望能得到一些帮助,看看下面的代码出了什么问题。简单来说,我想创建一个包含ID和slug字段的URL,比如 something.com/1/arts-and-crafts
。
我遇到了一个问题,出现了“NoReverseMatch”错误,具体信息如下:
找不到 'category' 的反向匹配,参数是 '(2, u'arts-and-crafts')',关键字参数是 '{}'。尝试了 2 个模式:['(?P\d+)/[-\w]+/$', '(?P\d+)/$']
下面是我使用的代码,如果能帮我理解哪里出错了,我会非常感激:
模板 HTML
<ul class="list-unstyled">
{% for category in categories %}
{% if forloop.counter < 10 %}
<li><a href="{% url 'category' category.id category.slug %}">
{{ category.cat_name}}</a></li>
{% endif %}
{% endfor %}
</ul>
url.py
url(r'^(?P<cat_id>\d+)/[-\w]+/$', 'guides.views.category', name='category'),
views.py
def category(request, cat_id):
categories = Category.objects.all()
guides = Guide.objects.filter(category__id=cat_id).order_by("created_date").reverse()
is_featured = Guide.objects.filter(category__id=cat_id).filter(featured=True)
selected_category = get_object_or_404(Category, pk=cat_id)
return render(request, 'guides/category.html', {'categories': categories, 'guides': guides, 'is_featured': is_featured, 'selected_category': selected_category})
1 个回答
0
你的网址没有把“slug”这个部分当作参数抓取,所以在反向调用的时候用不了。你可以把第二个模式改成 (?P<slug>[-\w]+)
,或者在 {% url %}
标签里不要用 category.id
。