博客详情页如何实现查询分类下所有文章并排除当前文章

分类: Python 作者: 浏览:18 时间:2019年5月12日 04:09 评论:0

当一个用户在看你的博客文章时,他(她)还想看看相关类型的文章,还要排除当前文章,并且不能包含当前文章,如何实现呢?

这里我用到了djangotamplate_tags,如果没有了解过模板标签,请到官网自行了解

blog应用下创建tamplate_tags包(不是py文件,包含一个__init__.py)

from django import template  
from blog.models import Article,Tag  
register = template.Library()  


@register.simple_tag  
def get_recommend_article(article):  
    """  
    获取相关文章,排除自己  
    :param article: 是当前文章实例对象  
    :return: 返回一个加工后的列表  
    """  
    tags = article.tags.all()  
    # 通过外键获取到所有的标签  
    article_list = []  
    for tag in tags:  
        for post in tag.article_set.filter(status="p"):  
            # 遍历每一个标签下的文章并添加到新的列表中(status是发表/草稿的状态)  
            if post != article:  
                article_list.append(post)  
    return article_list  

然后在博客详情页加载模板标签有可以使用了

{% load_blog_tags %}  
<!-- 行首添加加载标签(可能要重启服务器) -->  
{% get_recommend_article article as article_list %}  
<!-- 使用时添加这个(article是详情页的文章实例对象) -->  
{% for article in article_list %}  
{% endfor %}  

```

赞(2)

评论(0)

  • 暂无评论