Django集成第三方标签功能

django-taggit模块是一个可重用的应用程序,它主要提供一个标签模型和一个管理器,可以轻松地向任意模型添加标签。
https://github.com/alex/django-taggit

目录

安装django-taggit

添加taggit到setting.py中的INSTALLED_APPS

编辑models.py,将标签应用到post模型

更新数据库

重构blog应用程序的views.py文件

添加标签路径到urls.py

更新list.html模版,为标签增加链接


安装django-taggit

python -m pip install django-taggit

添加taggit到setting.py中的INSTALLED_APPS

INSTALL_APPS = [#...'taggit',
]

编辑models.py,将标签应用到post模型

from taggit.managers import TaggableManagerclass Post(models.Mocel):#...tags = TaggableManager()

标记管理器将允许您从Post对象中添加、检索和删除标记。

更新数据库

python manage.py makemigrations blogpython manage.py migrate

重构blog应用程序的views.py文件

导入标签模型表单django-taggit,并将post_list视图更改为根据标签筛选帖子。视图最终是这样的。

def post_list(request,tag_slug=None):object_list = Post.published.all()tag = Noneif tag_slug:tag = get_object_or_404(Tag, slug=tag_slug)object_list = object_list.filter(tags__in=[tag])paginator = Paginator(object_list,3)page = request.GET.get('page')try:posts = paginator.page(page)except PageNotAnInteger:posts = paginator.page(1)except EmptyPage:posts = paginator.page(paginator.num_pages)template = "blog/post/list.html"context = {"page":page,"posts":posts,"tag":tag,}return render(request,template,context)
  • 视图接受一个可选的tag_slug参数,默认值为None。该参数将出现在URL中。  
  • 在视图中,构建初始QuerySet,检索所有已发布的文章,如果存在给定的标记段,我们使用get_object_or_404()获取带有给定段的tag对象。  
  • 然后,根据包含给定标记的帖子筛选帖子列表。由于这是一个多对多关系,我们必须根据给定列表中包含的标记进行筛选,在示例中,该列表只包含一个元素。

添加标签路径到urls.py

path("", views.post_list, name="post_list"),
path('tag/<slug:tag_slug>/',views.post_list, name='post_list_by_tag'),

两个路径都指向相同的视图,但是我们对它们的命名不同。  

第一种模式将调用不带任何可选参数的post_list视图,而第二种模式将调用带tag_slug参数的视图。这里使用一个slug路径转换器将参数匹配为一个小写字符串,其中包含ASCII字母或数字,以及连字符和下划线字符。

更新list.html模版,为标签增加链接

    {% if tag %}<h2>Posts tagged with "{{ tag.name }}"</h2>{% endif %}

如果tag不是None,显示正在过滤的tag名称。

<p class="tags">Tags:{% for tag in post.tags.all %}<a href="{% url 'blog:post_list_by_tag' tag.slug %}">{{ tag.name }}</a>{% if not forloop.last %},{% endif %}{% endfor %}</p>

遍历一个帖子的所有标记,显示一个自定义链接到URL,以根据该标记过滤帖子。我们使用{% URL "blog:post_list_by_tag"标签构建URL。使用URL的名称和slug标记作为其参数。我们用逗号分隔标签。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/597438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript判断题复习

JavaScript 题号题目AB答案1JavaScript不可以跨平台。对错B2JavaScript中&#xff0c;age与Age代表不同的变量。对错A3JavaScript中的数字型可以用来保存整数或浮点数&#xff08;小数&#xff09;。对错A4低版本的IE浏览器&#xff08;IE 6~IE 8&#xff09;中&#xff0c;可…

Linux配置Acado

如果需要使用acado的matlab接口&#xff0c;请移步&#xff1a;Linux Matlab配置Acado 首先&#xff0c;安装必要的软件包&#xff1a; sudo apt-get install gcc g cmake git gnuplot doxygen graphviz在自定义目录下&#xff0c;下载源码 git clone https://github.com/ac…

windows+django+nginx部署静态资源文件

平台&#xff1a;windows python&#xff1a;3.10.0 django&#xff1a;4.0.8 nginx&#xff1a;1.24.0 背景 开发阶段采用前后端分离模式&#xff0c;现在要将项目部署到工控机上&#xff0c;把前端项目编译出来的静态文件放到后端项目中进行一体化部署&#xff0c;且不修改…

python打包exe

打包python绘制玫瑰花_python生成玫瑰花-CSDN博客 这个链接的程序 隐藏 控制台窗口&#xff08;如果你的程序是GUI&#xff0c;不是控制台应用可以选用&#xff0c;比如本案例的送你玫瑰花就是白底的&#xff09; 报错的话&#xff0c;可能没有pyinstaller这个库 参考&#x…

【KingbaseES】实现MySql函数Field

CREATE OR REPLACE FUNCTION field(value TEXT, VARIADIC arr TEXT[]) RETURNS INT AS $$ DECLAREi INT; BEGINFOR i IN 1 .. array_length(arr, 1) LOOPIF arr[i] value THENRETURN i;END IF;END LOOP;RETURN 0; END; $$ LANGUAGE plpgsql IMMUTABLE;

Apache的网页优化

掌握Apache网页压缩掌握Apache网页缓存掌握Apache隐藏版本信息掌握Apache网页防盗链 1.1 网页压缩 在使用 Apache 作为 Web 服务器的过程中&#xff0c;只有对 Apache 服务器进行适当的优化配 置&#xff0c;才能让 Apache 发挥出更好的性能。反过来说&#xff0c;如果 Apache…

c++ asio: udp server and client demo

一、server 端 创建udp::socket&#xff0c;用于收发数据 1&#xff09;需要创建一个io_context对象&#xff0c;初始化socket对象 2&#xff09;创建一个udp::endpoint对象&#xff0c;指定协议版本&#xff08;v4&#xff0c;v6&#xff09;和端口号&#xff0c;初始化socket…

How to collect data

How to collect data 爬虫JavaPython反爬虫 自动化测试工具SeleniumQMetry Automation StudioTestComplete RPA商业化产品艺赛旗影刀UIPath 开源产品Robot Framework RPA 爬虫 Java Python urllibrequestsBeautifulSoup 反爬虫 自动化测试工具 Selenium QMetry Automati…

项目初始化脚手架搭建

项目初始化脚手架搭建 仓库地址 easy-web: 一个快速初始化SpringBoot项目的脚手架 (gitee.com) 目前这个项目还是个单体项目&#xff0c;后续笔者有时间可能会改造成父子工程项目&#xff0c;将通用模块抽象出来&#xff0c;有兴趣的小伙伴也可以自行 CV 改造。 1、项目初始化…

数据类型检测的底层机制

1 typeof用于检测基本数据类型&#xff0c; 原理机制、采用的是计算机底层存储二进制检测&#xff0c;效率比较快。 null在计算机存储二进制的过程中是64个零&#xff0c;而typeof判断的话前三位都为0的时候是object。 typeof只能检测基本数据类型&…

attachShadow样式隔离和JavaScript 沙箱

微服务样式隔离的原理是利用 Shadow DOM 技术来隔离各个微前端应用的样式。Shadow DOM 是 Web 标准的一部分&#xff0c;它允许将 DOM 树封装到一个隔离的影子 DOM 中&#xff0c;这样各个微前端应用的样式就不会相互影响&#xff0c;从而实现样式的隔离。 Qiankun 在每个微前端…

【重点】【BFS】542.01矩阵

题目 法1&#xff1a;经典BFS 下图中就展示了我们方法&#xff1a; class Solution {public int[][] updateMatrix(int[][] mat) {int m mat.length, n mat[0].length;int[][] dist new int[m][n];boolean[][] used new boolean[m][n];Queue<int[]> queue new Li…

软件工具集合

代码文档自动生成工具&#xff1a; Doxygen download 软件分析工具&#xff1a; perf gdb flamegraph 代码量统计&#xff1a; vscode插件&#xff1a;VS Code Counter 代码备注 vsocde插件&#xff1a; Line Note

Spring Boot 3 集成 Thymeleaf

在现代的Web开发中&#xff0c;构建灵活、动态的用户界面是至关重要的。Spring Boot和Thymeleaf的结合为开发者提供了一种简单而强大的方式来创建动态的Web应用。本文将介绍如何在Spring Boot项目中集成Thymeleaf&#xff0c;并展示一些基本的使用方法。 什么是Thymeleaf&#…

未来已来,Ai原生应用与人高度结合!学习就在现在?

原生应用&#xff1a;OpenAI™ChatGPT、Baidu.Inc™文心一言 也可以体验CSDN的INSCODE AI&#xff0c;集成多个国内GPT内容。 文章目录 前言----编程语言的未来&#xff1f;一、编程语言的教育1.1 学校所见所闻1.2 开启我们的Ai行程~io&#xff01;1.3 Ai结果评论 二、Ai编程教…

信息学奥赛一本通-编程启蒙3295:【例50.1】陶陶摘苹果

3295&#xff1a;【例50.1】陶陶摘苹果 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 2838 通过数: 1922 【题目描述】 陶陶家的院子里有一棵苹果树&#xff0c;每到秋天树上就会结出1010个苹果。苹果成熟的时候&#xff0c;陶陶就会跑去摘苹果。陶陶有个3030厘…

Linux环境vscode clang-format格式化:vscode clang format command is not available

问题现象 vscode安装了clang-format插件&#xff0c;但是使用就报错 问题原因 设置中配置的clang-format插件工具路径不正确。 解决方案 确认本地安装了clang-format工具&#xff1a;终端输入clang-format&#xff08;也可能是clang-format-13等版本&#xff0c;建议tab自…

[NISACTF 2022]popchains

[NISACTF 2022]popchains wp 题目代码&#xff1a; Happy New Year~ MAKE A WISH <?phpecho Happy New Year~ MAKE A WISH<br>;if(isset($_GET[wish])){unserialize($_GET[wish]); } else{$anew Road_is_Long;highlight_file(__FILE__); } /**********************…

AI实景无人直播创业项目:开启自动直播新时代,一部手机即可实现增长

在当今社会&#xff0c;直播已经成为了人们日常生活中不可或缺的一部分。无论是商家推广产品、明星互动粉丝还是普通人分享生活&#xff0c;直播已经渗透到了各行各业。然而&#xff0c;传统直播方式存在着一些不足之处&#xff0c;如需现场主持人操作、高昂的费用等。近年来&a…

Android Studio 报错Failed to find Build Tools revision 28.0.3

目录 前言 一、报错信息 二、报错原因 三、解决方案 四、更多资源 前言 当Android Studio报错提示"Failed to find Build Tools revision 28.0.3"时&#xff0c;通常意味着您的项目需要使用28.0.3版本的构建工具&#xff0c;但系统中并没有找到对应的版本。这可…