我的博客开发(009)

增加新功能:
我的博客开发(009)_第1张图片
但是代码多,可以使用annotate来精简:

使用annotate改进精简:
我的博客开发(009)_第2张图片
代码:

from django.db.models import Count

def get_blogs_list_common_data(request, blogs_all_list):
    ...
    # context['blog_types'] = BlogType.objects.all()
    # context['blog_types'] = blog_types_list
    context['blog_types'] = BlogType.objects.annotate(blog_count=Count('blog'))
    ...

具体如图:
我的博客开发(009)_第3张图片
同样按日期归档的也要显示有多少条数据:

views.py


def get_blogs_list_common_data(request, blogs_all_list):
    ...
    if page_range[-1] != paginator.num_pages:
    page_range.append(paginator.num_pages)


    # 获取日期归档对应的博客数量
    blog_dates = Blog.objects.dates('created_time','month',order='DESC')
    blog_dates_dict = {}
    for blog_date in blog_dates:
        blog_count = Blog.objects.filter(created_time__year=blog_date.year,
                                     created_time__month=blog_date.month).count()
        blog_dates_dict[blog_date] = blog_count
    ...
    context['blog_types'] = BlogType.objects.annotate(blog_count=Count('blog'))
    # context['blog_dates'] = Blog.objects.dates('created_time', 'month', order="DESC")
    context['blog_dates'] = blog_dates_dict
    return context

blog_list.html

...
                
日期归档
                
                                     
            

效果如下:
我的博客开发(009)_第4张图片
精简代码像上面annotate方法一样:难以做到,因为存在一个转换成列表并提取的过程,比较复杂,不如原本的方法!所以不做修改!

你可能感兴趣的:(python,javascript,前端,django,数据库)