【问题标题】:Why do I get a No Reverse Match error in this case?为什么在这种情况下会出现“无反向匹配”错误?
【发布时间】:2020-07-28 15:54:17
【问题描述】:

所以,这就是发生的事情:

我可以通过主键在我的 Django 2.1 应用程序中获得一篇博文。但是,由于营销团队的要求,我被要求在 URL 上加上一个 slug,所以我应该得到 /blog/my-blog-post-title 而不是 /blog/1

因此,虽然仍然使用 pk 值来获取博客文章,但我只需要获取 url 即可按照我的意图工作。

网址:

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

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

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

,这样我就得到了 pk 和 slug,这是通过在 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)

不过,在 href 中引用 blog-single 的任何页面中,我都会收到以下错误:

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】:

    blog-single url 只需要 slug。使用 url 模板标签时不要包含 pk kwarg。

    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):
        ...
    

    【讨论】:

    • 是的,应该这样做。非常感谢!
    猜你喜欢
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    相关资源
    最近更新 更多