为什么在这种情况下会出现“无反向匹配”错误?
Why do I get a No Reverse Match error in this case?
所以,这就是发生的事情:
我可以通过主键在我的 Django 2.1 应用程序中获取博客 post。但是,根据营销团队的要求,我被要求在 URL 上放一个 slug,所以我应该得到 /blog/my-blog-post-title
.
而不是 /blog/1
因此,虽然仍然使用 pk 值来获取博客 post,但我只需要让 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 和 slug,这是通过博客模型上声明的 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_]+)\/$']
我尝试了很多在互联网上找到的不同答案,并广泛阅读了这个 post 上的答案,但我无法理解哪里不起作用:
有什么建议吗?
blog-single
url 只需要鼻涕虫。使用 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):
...
所以,这就是发生的事情:
我可以通过主键在我的 Django 2.1 应用程序中获取博客 post。但是,根据营销团队的要求,我被要求在 URL 上放一个 slug,所以我应该得到 /blog/my-blog-post-title
.
/blog/1
因此,虽然仍然使用 pk 值来获取博客 post,但我只需要让 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 和 slug,这是通过博客模型上声明的 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_]+)\/$']
我尝试了很多在互联网上找到的不同答案,并广泛阅读了这个 post 上的答案,但我无法理解哪里不起作用:
有什么建议吗?
blog-single
url 只需要鼻涕虫。使用 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):
...