增加新功能:
image.png
image.png
image.png
image.png
但是代码多,可以使用annotate来精简:

使用annotate改进精简:
image.png
代码:

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'))
    ...

具体如图:
image.png
同样按日期归档的也要显示有多少条数据:

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

...
                <div class="panel-heading">日期归档</div>
                <div class="panel-body">
                    <ul>
{#                        <li>2020年4月</li>#}
{#                        <li>2020年3月</li>#}
                            {% for blog_date,blog_count in blog_dates.items %}
                                <li>
                                    <a href="{% url 'blogs_with_date' blog_date.year blog_date.month %}">
                                        {{ blog_date|date:'Y年m月'}}({{ blog_count }})
                                    </a>
                                </li>
                            {% endfor %}
                    </ul>
                </div>
            </div>

效果如下:
image.png
精简代码像上面annotate方法一样:难以做到,因为存在一个转换成列表并提取的过程,比较复杂,不如原本的方法!所以不做修改!


笨小孩
20 声望3 粉丝

你,要怎样度过这一生?有的人二十岁已经死了,有的人七十岁还在发现生命的可能,有人终其一生,不知道自己要的是什么;有人简单执拗,终其一生;忠于自我未必有结果,坚持努力也不一定换来成功,但有天,回望过...