在我的Django 2.1应用中,我具有以下视图:
def single(request, post_slug):
post = get_object_or_404(Post, slug=post_slug)
suggested = Post.objects.all()[:2]
context = {'post': post, 'suggested': suggested}
return render(request, 'single.html', context)
def course(request,post_tags):
posts = get_object_or_404(Post, tags=post_tags)
posts = Post.objects.filter(is_course=True).filter(tags__contains=post_tags).order_by('lesson_order')
return render(request, 'learn.html', {'posts': posts})
和urls.py
path('courses/<tag:post_tags/', app.views.course, name='learn'),
path( '<slug:post_slug>/', app.views.single, name='single')
单个帖子运行正常,但课程/标签名不会返回404,尽管我确定要加载的标签存在。
我认为我在某个地方犯了一个小错误!在此先感谢您的帮助。
答案 0 :(得分:1)
您的path(..)
规范存在两个错误:
>
);和tag
不是有效的path converter [Django-doc],我们可以使用str
或path
之类的另一个。因此,我们可以修复这两个错误并获得以下path(..)
:
path('courses/<path:post_tags>/', app.views.course, name='learn'),
在视图本身中,您可能不要使用get_object_or_404
[Django-doc],因为如果有多个具有给定标签的Post
,那么它将引发一个错误。您可能要使用get_list_or_404
[Django-doc]:
from django.shortcuts import get_list_or_404
def course(request,post_tags):
posts = get_list_or_404(Post.objects.order_by('lesson_order'), is_course=True, tags__contains=post_tags)
return render(request, 'learn.html', {'posts': posts})