我的博客搭建之文章归档

  • 文章
  • 作者:Hubery
  • 发布时间:2019-04-17
  • 阅读数:98
  • 分类:博客搭建
  • 标签: Django

  1. 一、Django实现归档的几种方式


  2. 1、简单的实现


    视图:

    # views.py
    
    def archives(request, year, month):
        """返回点击归档后对应的文章"""
        post_list = Post.objects.filter(created_time__year=year,
                                        created_time__month=month
                                        ).order_by('-created_time')
        return render(request, 'blog/index.html', context={'post_list': post_list})


        路由:

    # urls.py
    
     url(r'^archives/(?P[0-9]{4})/(?P[0-9]{1,2})/$', views.archives, name='archives'),


        自定义标签模板

    # templatetags/blog_tags.py
    @register.simple_tag
    def archives():
        """注册一个自定义标签"""
        return Post.objects.dates('created_time', 'month', order='DESC')
    # 这里讲一下dates
    # 可以根据时间赛选 返回一个去重后的时间的Queryset


        在模板中使用 

    # index.html
    
    <div class="widget widget-archives">
      <h3 class="widget-title">归档</h3  
    {{% archives as date_list %}
      <ul>
        {% for date in date_list %}
        <li>
          <a href="/archives/{{ date.year }}/{{ date.month }}">{{ date.year }} 年 {{ date.month }} 月</a>
        </li>
        {% empty %}
        暂无归档!
        {% endfor %}
      </ul>
    </div>


    2、使用django自带的regroup标签


    regroup标签的相文档:

 https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#regroup


    视图函数:

# views.py
def archives(request):
    """
    文章归档
    :param request:
    :return:
    """
    dates = Blog.objects.all().order_by('-create_time')
    data = {
        'title': '文章归档',
        'dates': dates
    }
    return render(request, 'blog/archives.html', context=data)


    模板:

#html 使用的layui
<h2>文章归档</h2>
<hr class="layui-bg-red">
<ul class="layui-timeline">
 {% regroup dates by create_time.year as year_blog_group  %}
 {% for year in year_blog_group %}
    <li class="layui-timeline-item">
     <i class="layui-icon layui-timeline-axis">&#xe63f;</i>
     <div class="layui-timeline-content layui-text year-ul-list">
         <h3 class="layui-timeline-title">{{ year.grouper }}年</h3>
         <ul class="layui-timeline">
             {% regroup year.list by create_time.month as month_blog_group %}
             {% for month in month_blog_group %}
                <li class="layui-timeline-item">
                <i class="layui-icon layui-timeline-axis">&#xe63f;</i>
                <div class="layui-timeline-content layui-text">
                    <h3 class="layui-timeline-title">{{ month.grouper }}月</h3>
                    <ul>
                        {% for blog in month.list%}
                            <li>
                                <a href="{% url 'blog:read_blog' %}?blogid={{ blog.id }}" target="_blank">
                                    {{ blog.create_time|date:'m-d' }} -- {{ blog.title }}</a>
                            </li>
                        {% endfor %}
                    </ul>
                </div>
                </li>
             {% endfor %}
         </ul>
     </div>
    </li>
     {% empty %}
     <h3 style="color: red;">暂无归档</h3>
 {% endfor %}
</ul>

 

其中样式我使用了layui带的 效果图:


微信截图_20190417142306.png

评论列表
优秀的你不评论一下咩!!
新的评论