所以,这是怎么回事:
我能够通过其主键在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?
有什么建议吗?
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):
...