Django之通过tag推荐文章
#路由 views.py
def post_detail(request,year,month,day,post): ''' 文章详情 + 评论详情 :param request: :param year:文章发布的年份 :param month:文章发布的月份 :param day:文章发布day :param post:文章标题 :return:匹配的具体对象 ''' post=get_object_or_404(Post,title=post) #post.comments 的来源 ==> related_name='comments' comments=post.comments.filter(active=True) new_comment=None if request.method=='POST': comment_form=CommentForm(data=request.POST) if comment_form.is_valid(): #不会存入数据库 new_comment=comment_form.save(commit=False) new_comment.post=post new_comment.save() else: comment_form=CommentForm() # 列出相似的文章 #获取文章post的标签 post_tags_ids = post.tags.values_list('id', flat=True) #过滤其他的文章排除本事 similar_posts = Post.published.filter(tags__in=post_tags_ids).exclude(id=post.id) # similar_posts = similar_posts.annotate(same_tags=Count('tags')).order_by('-same_tags', '-publish')[:4] return render(request,'myblog/post/detail.html',{'post':post, 'comments': comments, 'comment_form':comment_form, 'new_comment':new_comment, 'similar_posts': similar_posts })
html:
<!-- 推荐类似文章 --> <h2>相似文章</h2> {% for post in similar_posts %} <p> <a href="{{ post.get_absolute_url }}">{{ post.title }}</a> </p> {% empty %} 没有类似的文章。 {% endfor %}