当前位置: 首页 > news >正文

网站后门清除长春制作网站定制

网站后门清除,长春制作网站定制,wordpress环境包,宁波海曙区建设局网站文章目录0.思路引导1.Model 回顾2.数据库数据聚合3.使用 Annotate4.在模板中引用新增的属性0.思路引导 在我们的博客侧边栏有分类列表和标签列表#xff0c;显示博客已有的全部文章分类。现在想在分类名和标签名后显示该分类或者标签下有多少篇文章#xff0c;该怎么做呢显示博客已有的全部文章分类。现在想在分类名和标签名后显示该分类或者标签下有多少篇文章该怎么做呢最优雅的方式就是使用 django 的 annotate 方法。 1.Model 回顾 回顾一下我们的 model 代码django 博客有一个 Post 和 Category 模型分别表示文章和分类 文件位置blog/models.py class Post(models.Model):title models.CharField(标题, max_length70)body models.TextField(正文)category models.ForeignKey(Category, verbose_name分类, on_deletemodels.CASCADE)# 其它属性...def __str__(self):return self.titleclass Category(models.Model):name models.CharField(分类名, max_length100) 我们知道从数据库取数据都是使用模型管理器 objects 的方法实现的。比如获取全部分类是Category.objects.all() 假设有一个名为 test 的分类那么获取该分类的方法是Category.objects.get(name‘test’) 。 objects 除了 all、get 等方法外还有很多操作数据库的方法而其中有一个 annotate 方法该方法可以帮我们实现本文所关注的统计分类下的文章数量的功能。 2.数据库数据聚合 annotate 方法在底层调用了数据库的数据聚合函数下面使用一个实际的数据库表来帮助我们理解 annotate 方法的工作原理。 在 Post 模型中我们通过 ForeignKey 把 Post 和 Category 关联了起来这时候它们的数据库表结构就像下面这样 Post 表 Category 表 1当 Django 要查询某篇 post 对应的分类时比如 post 1首先查询到它分类的 id 为 1然后 Django 再去 Category 表找到 id 为 1 的那一行这一行就是 post 1 对应的分类。 2反过来如果要查询 category 1 对应的全部文章呢category 1 在 Category 表中对应的 id 是 1Django 就在 Post 表中搜索哪些行的 category_id 为 1发现前 3 行都是把这些行取出来就是 category 1 下的全部文章了。 3同理这里 annotate 做的事情就是把全部 Category 取出来然后去 Post 查询每一个 Category 对应的文章查询完成后只需算一下每个 category id 对应有多少行记录这样就可以统计出每个 Category 下有多少篇文章了。 4把这个统计数字保存到每一条 Category 的记录就可以了当然并非保存到数据库在 Django ORM 中是保存到 Category 的实例的属性中每个实例对应一条记录。 3.使用 Annotate 以上是原理方面的分析具体到 Django 中该如何用呢在我们的博客中获取侧边栏的分类列表的方法写在模板标签 get_categories 里因此我们修改一下这个函数具体代码如下 文件位置blog/templatetags/blog_extras.py from django.db.models.aggregates import Count from blog.models import Categoryregister.inclusion_tag(blog/inclusions/_categories.html, takes_contextTrue) def show_categories(context):category_list Category.objects.annotate(num_postsCount(post)).filter(num_posts__gt0)return {category_list: category_list,}1这个 Category.objects.annotate 方法和 Category.objects.all 有点类似它会返回数据库中全部 Category 的记录但同时它还会做一些额外的事情在这里我们希望它做的额外事情就是去统计返回的 Category 记录的集合中每条记录下的文章数。 2代码中的 Count 方法为我们做了这个事它接收一个和 Categoty 相关联的模型参数名这里是 Post通过 ForeignKey 关联的然后它便会统计 Category 记录的集合中每条记录下的与之关联的 Post 记录的行数也就是文章数最后把这个值保存到 num_posts 属性中。 3此外我们还对结果集做了一个过滤使用 filter 方法把 num_posts 的值小于 1 的分类过滤掉。因为 num_posts 的值小于 1 表示该分类下没有文章没有文章的分类我们不希望它在页面中显示。 同理tags 也可以做同样的操作。 register.inclusion_tag(blog/inclusions/_tags.html, takes_contextTrue) def show_tags(context):tag_list Tag.objects.annotate(num_postsCount(post)).filter(num_posts__gt0)return {tag_list: tag_list,}4.在模板中引用新增的属性 现在在 Category 和 Tag 列表中每一项都新增了一个 num_posts 属性记录该 Category 下的文章数量我们就可以在模板中引用这个属性来显示分类下的文章数量了。 文件位置templates/blog/inclusions/_categories.html div classwidget widget-categoryh3 classwidget-title分类/h3ul{% for category in category_list %}lia href{% url blog:category category.pk %}{{ category.name }} span classpost-count({{ category.num_posts }})/span/a/li{% empty %}暂无分类{% endfor %}/ul /div文件位置templates/blog/inclusions/_tags.html div classwidget widget-tag-cloudh3 classwidget-title标签云/h3ul{% for tag in tag_list %}lia href{% url blog:tag tag.pk %}{{ tag.name }} span classpost-count({{ tag.num_posts }})/a/li{% empty %}暂无标签{% endfor %}/ul /div也就是在模板中通过模板变量 {{ category.num_posts }}以及 {{ tag.num_posts }}显示 num_posts 的值。 开启开发服务器可以看到分类名后正确地显示了该分类下的文章数了而没有文章分类则不会在分类列表中出现。 效果展示如下
http://www.pierceye.com/news/598992/

相关文章:

  • 世界上前端做的最好的网站2345浏览器官网网址
  • 做模板网站赚钱吗网站建设需要多少内存
  • C语言网站开发pdf专科网站开发简历
  • 静态网站怎么做优化网站建设用什么软件
  • 如何建设移动端网站物联网设计
  • 赣州网站设计哪里好天河网站建设多少钱
  • 做lol直播网站设计一个公司网站多少钱
  • 电商网站 投诉百度录入网站
  • 如何做产品网站网页论坛的网站开发项目
  • 如何在记事本中做网站链接冰雪蜜城店加盟费多少
  • 中山网站建设公司专业建站公司设计
  • 汽车手机网站制作一个具体网站的seo优化
  • 手机网站的页面大小wordpress下载主题博客
  • 创客贴设计网站官网高端网站制作网址
  • 衡水网站建设选哪家信用网站系统建设方案
  • 网站全屏代码如何做网站外链
  • 中国人自己的空间站哪里有免费的网站模板下载 迅雷下载 迅雷下载软件
  • 网站建设預算网站的新闻模块怎么做
  • 浙江省建设厅查询官方网站外贸业务员
  • 乐清公司网站建设高端网站有哪些
  • 网站备案状态查询漳州北京网站建设
  • wordpress oss ftp湖北百度seo排名
  • 深圳福田站弹簧机东莞网站建设
  • 网站美工要求企业建设网站风险
  • 网站建设项目资金申请报告semen
  • 阿里巴巴上做网站要多少钱信息网络工程师
  • 网站建设与网页设计心得体会淘宝网页制作素材
  • 男女做床网站装酷网装修平台
  • 网站引导页动画华为网站哪个公司做的
  • 网站开发用了哪些技术上海建设网站制作