博客增加按年月归档的功能


发布时间:2019-02-15 13:08    作者: 晖哥哥   已过去:4 年,1 月   阅读总量:1655 已被赞:1


1.建立处理的视图(因为要按年月分类,需要传递年月为参数)

#按年月归档处理视图
def nygd(request,year,month):
    pass

2.建立跳转的url

path('date/<int:year>/<int:month>', views.nygd,name='blog_nianyueguidang'),#

3.确立需要使用年月归档导航的页面,并在这个页面的视图里处理,并渲染

我这里在首页显示

4.写好前段代码

<div class="widget widget_sentence">
      <h3>日期归档</h3>
      <div class="widget-sentence-link">
       <p> <a href="#" title="#" target="_blank" >#</a></p>
      </div>
    </div>

5.在首页的视图里写处理方法:

content['blog_date'] = Blogwenzhang.objects.dates('release_time','month',order='DESC')
#博客文章类.objects.dates 这个方法获取时间处理(“需要处理的模型字段:发布时间”,“月”,order=排序方式DESC倒叙,ASC正序

detes()方法,只会处理给出字段的年月日。“year”年,"month" 月,"day":天 更多应参考django官网,搜detes()

6.前台循环打印

{#年月分类#}
     <div class="widget widget_sentence">
      <h3>日期归档</h3>
      <div class="widget-sentence-link">
          {% for blog_date in blog_dates %}
       <p> <a href="#" title="{{ blog_date|date:"Y年m月"}}" target="_blank" >{{ blog_date|date:"Y年m月"}}</a></p>
           {% endfor %}
      </div>
    </div>

7.回到第一步建立处理的视图里:

注意:如果查询出来是一个空列表.

(处理方式一)就将stting.py 里的  USE_TZ = False 改成Flase,不会影响其他东西,可放心修改(虽然简单,但失去了时区,不建议使用)


方式二.1 windos :造成这个问题的原因是因为mysql 数据库存储时间采用的是o时区,所以因该在mysql数据库里放入时区文件,操作过程:

1.去https://dev.mysql.com/downloads/timezones.html,下载

2.将下载的文件解压复制到C:\ProgramData\MySQL\MySQL Server 5.7\Data\mysql 里,建议先备份在复制替换。

3.重启mysql服务器


如果是linux和mac系统,就在命令行执行以下命令:
mysql_tzinfo_to_sql/usr/share/zoneinfo | mysql -D mysql -u root -p ,然后输入密码,直接在线更新到mysql数据库


如果是通过“时分秒”查询,注意时间要加8小时,秒要用区间查询,__range
例如:
start_time = time(hour=17,minute=10,second=27)
ebd_time= time(hour=17,minute=10,second=28)
wenzhangs = Wenzhang.objects.filter(fabushijian__time__range = (start_time,end_time)



wenzhang_lists = Blogwenzhang.objects.filter(release_time__year=year,release_time__month=month)  # 查询发布时间与月的全部文章,并渲染wenzhang_lists到首页(这里忽略了分页,可参考前面文章写分页)

8.建立时间归类html模板

def nygd(request,year,month):
    wenzhang_lists = Blogwenzhang.objects.filter(release_time__year=year,release_time__month=month)  # 查询发布时间与月的全部文章
    wenzhangs = Blogwenzhang.objects.order_by('?')
    weixindashangimg = Guanggaoimg.objects.all()
    # 分页
    page_num = request.GET.get('page', 1)  # 获取url上 ?page= 的分页参数,GET请求,默认取1
    paginator = Paginator(wenzhang_lists, 7)  # 7篇分一次页
    page_of_blogs = paginator.get_page(page_num)  # get_page处理URL传来的参数,就算传来不合格参数,就自动使用默认值
    blog_dates = Blogwenzhang.objects.dates('release_time', 'month', order='DESC')
    # 博客文章类.objects.dates 这个方法获取时间处理(“需要处理的模型字段:发布时间”,“月”,order=排序方式DESC倒叙,ASC正序
    content = {
        'wenzhang_lists': wenzhang_lists,
        'wenzhangs': wenzhangs,
        'wexindashangimg': weixindashangimg,
        'page_of_blogs': page_of_blogs,
        'blog_dates':blog_dates
    }
    return render(request, 'blog/date_list.html', content)

9.前端模板循环,完成!

{% for wenzhang_list in page_of_blogs.object_list %}
   <article class="excerpt excerpt-1" style="">
  <a class="focus" href="{% url 'blog_wenzhangxiangqing' wenzhang_list.pk %}" title="{{ wenzhang_list.title }}" target="_blank" ><img class="thumb" data-original="{{ MEDIA_URL }}{{ wenzhang_list.img.img }}" src="{{ MEDIA_URL }}{{ wenzhang_list.img.img }}" alt=""  style="display: inline;"></a>
        <header><a class="cat" href="{% url 'blog_wenzhangxiangqing' wenzhang_list.pk %}" title="{{ wenzhang_list.classify }}" >{{ wenzhang_list.classify }}<i></i></a>
            <h2><a href="{% url 'blog_wenzhangxiangqing' wenzhang_list.pk %}" title="{{ wenzhang_list.title }}" target="_blank" >{{ wenzhang_list.title }}</a>
            </h2>
        </header>
        <p class="meta">
            <time class="time"><i class="glyphicon glyphicon-time"></i> {{ wenzhang_list.amend_time }}</time>
            <span class="views"><i class="glyphicon glyphicon-eye-open"></i> {{ wenzhang_list.reads }}</span>
        </p>
        <p class="note">{{ wenzhang_list.content|striptags|truncatechars:80}}</p>
    </article>
{% endfor %}

 

点赞

1




登陆后方可评论