添加slug到URL时出现NoReverseMatch错误

0 投票
1 回答
687 浏览
提问于 2025-04-18 05:43

我刚接触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

撰写回答