我正在尝试显示相关帖子,相关性基于类别。 帖子模型具有类别模型的外键。
有没有更好的方法可以做到这一点? 目前,我正在使用会话从single_post_detail_view发送category_name到自定义context_processor函数,然后该函数返回与该类别相关的帖子。
views.py
class PostDetailView(DetailView):
def get(self, request, slug):
post = Post.objects.get(slug=self.kwargs['slug'])
context = {
'post' : post
}
request.session['category'] = post.category.name
return render(request, 'blog/post_detail.html', context)
context_processors.py
from blog.models import Category
def related_posts(request):
if request.session['category']:
category = request.session['category']
return {
'related_posts': Category.objects.get(name=category).posts.all()
}
然后使用HTML
{% for post in related_posts %}
<a href="post.get_absolute_url()">{{post.title}}</a>
{% endfor %}
答案 0 :(得分:1)
上下文处理器旨在为每个请求运行。如果您需要将信息传递给它,则表明您不应该使用上下文处理器。
您可以使用辅助功能
def related_posts(category):
return category.posts.all()
然后将帖子手动添加到视图中的上下文中:
context = {
'post': post,
'related_posts': related_posts(post.category)
}
或者您可以编写自定义模板标签。
simple tag可以帮助您:
{% related_posts post.category as related_posts %}
{% for post in related_posts %}
...
{% endfor %}
或者也许您可以使用inclusion tag来呈现链接:
{% related_posts post.category %}