Djano-----博客数量统计
一、获得博客分类数量统计:
blog_types = Blogtype.objects.all()------>首先获得全部分类 >>> for i in blog_types:--------------->遍历单个分类 ... count = Blog.objects.filter(typename = i).count()------------>筛选分类 ... print(count) ... 33 2 1
1.方法一:
#添加博客分类数量: #1.获取所有的博客分类 得到每一个分类 blog_types = Blogtype.objects.all() blog_count_list = [] for blog_type in blog_types: #把blog_type_count属性添加给blog_type这个实例化,也就是给Blogtype多增加一个属性 blog_type.blog_type_count = Blog.objects.filter(typename = blog_type).count() blog_count_list.append(blog_type) contenx = {} contenx['page_of_blogs'] = page_of_blogs contenx['blogs'] = page_of_blogs.object_list#获取符合参数所有的文章 # contenx['count'] = Blog.objects.all().count() contenx['blog_dates'] = Blog.objects.dates('create_time','month','DESC') contenx['range_page'] = range_page contenx['blogtypes'] = blog_count_list#获取所有的分类 return contenx
2.方法二:使用annotate注释
annotate需要一个Count方法。需要导入,from django.db.models import Count
#Blogtype.objects.annotate(blog_type_count=Count('blog'))'blog'是关联Blogtype外键的Blog的小写
Count('')需要传入一个字段是Blog的小写 本质是一个sql查询
Blogtype.objects.annotate(Count('bog'))
二、获取日期的数量
blog_dates = Blog.objects.dates('create_time','month','DESC') blog_date_count_list = {} for blog_list_date in blog_dates: blog_date_count=Blog.objects.filter(create_time__year = blog_list_date.year, create_time__month = blog_list_date.month).count() blog_date_count_list[blog_list_date] = blog_date_count
blog_date_count_list[blog_list_date] = blog_date_count构造一个字典:日期值为:key_words 数量值为:value
字典的使用:
{% for blog_date,blog_count in blog_dates.items %} <li> <a href="{%url 'blog_with_date' blog_date.year blog_date.month%}">{{blog_date|date:"Y年m月"}} ({{blog_count}}) </a> </li> {%empty%} 暂无分类 {% endfor %}
三、Count 统计函数的使用
from django.db.models import Count
>>> dr = Blog.objects.dates('create_time','month','DESC') >>> dr.annotate(blog_count =Count( 'create_time')) <QuerySet [datetime.date(2018, 2, 1), 36]> >>>