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 %}

 

 

posted @ 2016-04-20 10:16  similarface  阅读(340)  评论(0编辑  收藏  举报