修改views.py对应方法
注意分类统计我们用的注释方法,annotate
按日期统计,我们用的原始方法,传了一个字典
这里把公共方法抽取出来,返回一个字典
def get_blog_common(request,blog_all_list):
paginator = Paginator(blog_all_list, settings.EACH_PAGE_NUMBER)
page_num = request.GET.get('page', 1) # 返回一个字典,默认值是1
page_of_blogs = paginator.get_page(page_num) # 返回对应页的博客
current_page_num = page_of_blogs.number # 获取当前页
print(current_page_num)
# 列表生成器,生成指定范围的页号,往前两页,往后两页,不能超过范围
page_range = [x for x in range(current_page_num - 2, current_page_num + 3) if
(x > 0 and x < paginator.num_pages + 1)]
if page_range[0] - 1 >= 2: # 中间用省略号表示
page_range.insert(0, "...")
if paginator.num_pages - page_range[-1] >= 2:
page_range.append("...")
if page_range[0] != 1: # 增加首页和尾页
page_range.insert(0, 1)
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
print( blog_dates_dict)
context = {}
context['blogs'] = page_of_blogs.object_list
context['page_of_blogs'] = page_of_blogs
context['blog_types'] = BlogType.objects.annotate(blog_count=Count('blog'))
context['page_range'] = page_range
context['blog_dates'] = blog_dates_dict
return context
对应模板页面部分,注意字典的遍历方法,items访问字典项
<div class="hidden-xs col-sm-4 col-md-3 col-lg-2"><!--博客分类-->
<div class="panel panel-default">
<div class="panel-heading">
<h4>博客分类</h4>
</div>
<div class="panel-body">
<ul class="blog_types">
{%for blog_type in blog_types%}
<li><a href="{%url 'blogs_with_type' blog_type.pk%}">{{blog_type.type_name}}({{blog_type.blog_count}})</a></li>
{% empty %}
<li>暂无分类</li>
{% endfor %}
</ul>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4>日期归档</h4>
</div>
<div class="panel-body">
<ul class="blog_datess">
{%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>
{% empty %}
<li>暂无分类</li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
效果