Django文章标签推荐

当博客文章实现了标签后,可以用它们做很多有趣的事情。关于标签的更多内容,请看

Django集成第三方标签功能-CSDN博客

使用标签,我们可以很好地对博客文章进行分类。类似主题的帖子会有几个共同的标签。下一步将构建一个功能,以显示类似的帖子的标签数量。当用户阅读一篇文章时,我们可以建议他们阅读其他标签相同的文章。

为了检索特定职位的类似职位,需要执行以下步骤:、

检索当前文章的所有标签

blog/views.py

python 复制代码
from django.db.models import Count

📌这是Django ORM的Count聚合函数。这个函数将允许执行标记的聚合计数。

Django.db.models包含以下聚合函数:

  • Avg:平均值
  • Max:最大值
  • Min:最小值
  • Count:对象计数

关于聚合函数,可查看官方文档

https://docs.djangoproject.com/zh-hans/5.0/topics/db/aggregation/

在render()函数之前的post_detail视图中添加以下行:

python 复制代码
post_tags_ids = post.tags.values_list('id', flat=True)

例如当前文章有两个标签 {id:1,value:'python'}{id:2,value:'django'},使用tags.values_list获取标签的id列表,返回一个元组(1,2)

📌将flat=True传递给它以获得像[1,2,3,...]这样的扁平列表。

获取所有贴有这些标签的帖子
从列表中排除当前的帖子,以避免推荐相同的帖子

python 复制代码
similar_posts = Post.published.filter(tags__in=post_tags_ids).exclude(id=post.id)

关于Post.published是在模型中自定义的一个返回已发布信息的方法,更多内容请查看

Django定制模型管理器-CSDN博客

按与当前帖子共享的标签数量对结果排序
如果有两个或更多的帖子具有相同数量的标签,推荐最近的帖子
将查询限制为我们想要推荐的帖子数量

python 复制代码
similar_posts = similar_posts.annotate(same_tags=Count('tags')).order_by('-same_tags','-publish')[:4]

将similar_posts对象添加到render()函数的上下文字典中

python 复制代码
    template = "blog/post/detail.html"
    context = {
        "post":post,
        "comments":comments,
        "new_comment":new_comment,
        "comment_form":comment_form,
        "similar_posts":similar_posts
    }

    return render(request,template,context)

关于comment功能,请查看Django评论系统-CSDN博客

编辑blog/post/detail.html模板,并在帖子评论列表之前添加以下代码

python 复制代码
    {% for post in similar_posts %}
    <p>
        <a href="{{ post.get_absolute_url }}">{{ post.title }}</a>
    </p>
    {% empty %}
        There are no similar posts yeet.
    {% endfor %}

关于get_absolute_url是在模型中自定义的使用日期为路径的方法,更多内容请看

Django用日期URL定位详情-CSDN博客

相关推荐
飞翔的佩奇1 分钟前
【完整源码+数据集+部署教程】甘蔗叶片病害检测系统源码和数据集:改进yolo11-GhostDynamicConv
python·yolo·计算机视觉·毕业设计·数据集·yolo11·甘蔗叶片病害检测
工业互联网专业21 分钟前
基于python的内蒙古旅游景点数据分析系统-Flask+spider+vue
vue.js·python·flask·毕业设计·源码·课程设计·内蒙古旅游景点数据分析系统
漫谈网络22 分钟前
pysnmp模块中 GET、SET、WALK操作详细分步解析
python·pysnmp
牛马的人生22 分钟前
入门Scikit-learn:让机器学习像呼吸一样自然!
python·其他·机器学习·scikit-learn
仙人掌_lz24 分钟前
四大LLM 微调开源工具包深度解析
人工智能·python·ai·开源·llm
这里有鱼汤35 分钟前
为什么我现在做Python项目都用UV?你看完就懂了
后端·python
qq_428989811 小时前
python 实现决策树规则
python·决策树
咧咧小侠1 小时前
使用 Python 构建并调用 ComfyUI 图像生成 API:完整实战指南
开发语言·python·ai·aigc
hvinsion1 小时前
【开源解析】:Python打造专业级USB安全弹出工具(附完整源码)
python·qt·开源·usb弹出·psutil检测进程·解除占用usb·强制弹出u盘程序
一个天蝎座 白勺 程序猿2 小时前
Python爬虫(54)Python数据治理全攻略:从爬虫清洗到NLP情感分析的实战演进
爬虫·python·自然语言处理