Django中如何template中查出不同Category的文章数量

image description

Django中如何template中查出不同Category的文章数量

写在最前面:

很简单的需求,在主页的分类上展示每个分类的文章数目。简单介绍一下,目前的文章分类是Category一个独立的表,字段只有name一个,文章主表Articles外键关联Category,我们当然可以在后端不管是反向还是正向,不管从Articles表还是Category表都可以查出这个值,但是看起来很麻烦,还得单独传值给前端,解析起来也很复杂,那么如何通过最简单的方式直接一步直接查出来呢,下面请看我的思路。

原来的model长这样:

class Category(models.Model):
    name = models.CharField(max_length=100)

只有一个name字段。

template的Category如下:

<ul>
    {% for i in categorys %}
    <li class="cat-item cat-item-1"><!--span><a href="#">- Lifestyle</a></span--><span><a href="/JiaBlog/articles/{{ i.name }}" target="_blank">- {{ i.name }}</a></span></li>
    {% endfor %}
</ul>

那么如何只在这个循环中查到不同分类的文章数量统计呢?

我想到了直接在model中返回,这样后端不需要单独返回字典,也不需要在template中用更加复杂的循环去解析。

我们在Category这个model中加一个函数返回对应分类名称的文章数量:

class Category(models.Model):
    name = models.CharField(max_length=100)
    def catcount(self):
        return Articles.objects.filter(category__name__exact=self.name).filter(status='有效').count()

多么简洁,这是我想到的最棒的思路,然后只需再修改一点template:

<ul>
    {% for i in categorys %}
    <li class="cat-item cat-item-1"><!--span><a href="#">- Lifestyle</a></span--><span><a href="/JiaBlog/articles/{{ i.name }}" target="_blank">- {{ i.name }}---({{ i.catcount }})</a></span></li>
    {% endfor %}
</ul>

大功告成!甚至不需要执行数据库迁移,因为没有改表结构,这就是ORM的魅力所在。

    ArithmeticJia         0         3171         Django         123    

David Ramon

ArithmeticJia

www.guanacossj.com

Life is Short,You need Python

Related Posts

You may like these post too

image description

用Django写一个自己的博客网站

##写在最前面: 想用Django写网站很久了,本地也建立过很多demo,对于整个框架的入门算是熟练了。用pycharm可 以很方便的新建一个Django工程。专业版的Pycharm是自带Django的,目前Diango的最新版本应该是2.1。 IDE:Pycharm python版本

image description

Django和Flask的区别

##写在最前面: python web开发有很多常用的框架,主要包括Django,Flask,Tornado,Diesel,Cubes,Pulsar,Falcon,webpy,大家最熟知的还是Django和Flask,今天就来简单介绍一下Django和Flask的区别,本博客就是使用Django开

Comments on this post

0 comments

Leave a comment

it’s easy to post a comment

image description
image description
image description
image description
image description
image description
image description
image description
image description

Copyright © 2019.Company name All rights reserved.苏ICP备19007197号