【小白实战】利用django2.0,搭建属于自己的博客(11)


发布时间:2019-02-15 13:08    作者: 晖哥哥   已过去:2 年,9 月   阅读总量:1235 已被赞:0


【使用聚合函数,获取文章的阅读总量,并显示在首页】

views.py/index函数:

def index(request):
    #获取全部博客列表和从关联表里取出他们的阅读数
    post_list = Post.objects.annotate(nums=Sum("read_post__read_num"))

          #read_post 模型Read_post的小写,双下划线read_num,求和的字段

index.html

修改显示代码:

{% block post %}
    {% for post in post_list %}

        <div class="blog-post">
            <hr>
            <h4 class="blog-post-title"><a href="{% url 'post_read' post.id %}">{{ post.title }}</a></h4>
            <p class="blog-post-meta">发布时间:{{ post.put_in_time|date:"Y-m-d H:i"}}&nbsp;&nbsp;&nbsp;
                作者: <a href="#">{{ post.author }}</a> &nbsp;&nbsp;阅读量:{{ post.nums|default_if_none:0 }}</p>
            <p>{{ post.context|striptags|truncatechars:200|safe}}</p>
        </div><!-- /.blog-post -->
    {% endfor %}
{% endblock %}

【时间归档增加每月有多少文章的计数及显示】

qunjubianliang.py

#定义时间归档
def date_times(request):
    #新建一个字典,将日期和起对应得文章数作为键和值存进去再遍历出来,就可以实现对应日期下文章数的查询统计
    date_post_num = {}
    #按月分类日期
    date_post = Post.objects.dates('put_in_time','month',order='DESC')
    #将日期循环出来,去文章表里找到发布日期与循环出的日期相同的文章,用count()计算个数
    for i in date_post:
        post_num = Post.objects.filter(put_in_time__year=i.year,put_in_time__month=i.month).count()
        #将每个循环出来的日期i,文章数,分别作为字典的k,v放进字典
        date_post_num[i]=post_num
        #print(date_post_num)
        #{datetime.date(2018, 12, 1): 2}
    return {'date_post': date_post_num} #传递到前端

 

base.html

 <h4>日期归档</h4>
        <ol class="list-unstyled">
{#        用items方法,循环遍历出里面的键和值#}
           {% for i,v in date_post.items %}
            <li><a href="{% url 'date_time' i.year i.month %}">{{ i|date:'Y年m月' }}({{ v }})</a></li>
           {% endfor %}

        </ol>

点赞

0




登陆后方可评论