0

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

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

因此,虽然仍然使用 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,这是通过get_slug()Blog 模型上声明的方法得到的。

视图在这里:

def blog_single(request, pk, slug):

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

    ...

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

尽管如此,在 中引用的任何页面中blog-singlehref我都会收到以下错误:

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_]+)\\/$']

我已经尝试了很多我在互联网上找到的不同答案,并广泛阅读了这篇文章的答案,但我无法理解什么不起作用:什么是 NoReverseMatch 错误,我该如何解决?

有什么建议么?

4

1 回答 1

0

blog-single网址只需要蛞蝓。使用模板标签时不要包含pkkwarg 。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):
    ...
于 2020-04-15T15:50:50.473 回答