为什么在这种情况下会出现No Reverse Match错误?

问题描述 投票:0回答:1

所以,这是怎么回事:

我能够通过其主键在Django 2.1应用中获得博客文章。但是,根据营销团队的要求,我被要求在URL上添加一个标签,因此我应该获得/blog/1而不是/blog/my-blog-post-title

因此,尽管仍然使用pk值获取博客文章,但我只需要获取URL即可按照我想要的方式工作。

URL:

path('<slug:slug>/', blog_views.blog_single, name='blog-single')

在HTML中,我总是将此页面称为:

href="{% url 'blog-single' pk=blogPost.id slug=blogPost.get_slug %}"

,这样我既得到了pk又得到了子弹,这是通过Blog模型上声明的get_slug()方法获得的。

视图在这里:

def blog_single(request, pk, slug):

    context = {}
    context['blogPost'] = blogPost.objects.get(id=pk)

    ...

    return render(request, 'blog/blog-single.html', context)

仍然,在blog-single中引用href的任何页面中,出现以下错误:

Reverse for 'blog-single' with keyword arguments '{'pk': 2, 'slug': 'my-blog-post-title'}' not found. 1 pattern(s) tried: ['blog\\/(?P<slug>[-a-zA-Z0-9_]+)\\/$']

我尝试了很多在互联网上找到的不同答案,并广泛阅读了这篇文章的答案,但是我无法解决无法解决的问题:What is a NoReverseMatch error, and how do I fix it?

有什么建议吗?

django django-urls django-errors django-url-reverse
1个回答
0
投票

blog-single网址仅包含该内容。使用pk模板标记时,请勿包含url变节。

href="{% url 'blog-single' slug=blogPost.get_slug %}"

然后将blog_single更改为:

def blog_single(request, slug):
    context = {'blogPost': blogPost.objects.get(slug=slug)}

或:

def blog_single(request, pk=None, slug=None):
    ...
© www.soinside.com 2019 - 2024. All rights reserved.