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
登陆后方可评论