博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网站搭建 (第05天) 分类和归档
阅读量:5051 次
发布时间:2019-06-12

本文共 3784 字,大约阅读时间需要 12 分钟。

一、分类

  在blog/views.py中定义一个博客分类的视图函数:

def category_list(request):    """        作用:博客分类的视图处理        request:请求对象    """    # 获得所有的分类    category_list = Category.objects.all()    context = {'category_list': category_list}    return render(request, 'blog/category_list.html', context)

  通过该视图函数,可以发现其向模板发送了category_list,也就是所有分类的列表,但是并没有对该分类下的文章进行数量计算,有两种方法可以通过category对象得到其对应的文章数量。

  方法一:

# 获取博客分类对应的博客数量# 通过对每个category绑定一个post_count属性category_list = []for category in category_list:    category.post_count = Post.objects.filter(category=category).count()    category_list.append(category)

  方法二:使用模板标签,简单使用方法如:   

  在templatetags文件夹中创建一个post_tags.py文件。

from django import templatefrom blog.models import Postregister = template.Library()@register.simple_tagdef get_category_post(category):    """        作用:获取该目录下的所有博客        obj:模板传递的参数,也就是category    """    post_list = Post.objects.filter(category=category)    return post_list[0:15]@register.simple_tagdef get_category_count(category):    """        作用:计算当前分类的文章数量,并返回到模板中        category:模板页面传入的category    """    return Post.objects.filter(category=category).count()

  前端代码实现

{% load post_tags %}...{% for category in category_list %}    {% get_category_post category as post_list %}    

  {
{ category }} ({% get_category_count category %})

{% for post in post_list %}
{% empty %}
暂无博客
{% endfor %}
{% empty %}

暂无分类!

{% endfor %}

二、归档

  在blog/views.py中定义一个日期归档的视图函数。

def date_list(request):    """        作用:日期归档的视图处理        request:请求对象    """    date_list = Post.objects.dates('created_time', 'month', order='DESC')    post_count = Post.objects.all().count()    context = {'date_list': date_list,               'post_count': post_count,}    return render(request, 'blog/date_list.html', context)

  同样的,日期归档也与上述非常相似,但是不能采用类似于方法一的解决方案,因为并没有设计关于日期的数据表,无法给日期直接绑定一个字段名,可是其也有两种方法,即使用字典或模板标签。

  方法一:

# 获取日期归档对应的博客数量# 利用字典post_date_dict = {}for post_date in date_list:    post_date_count = Post.objects.filter(created_time__year=post_date.year, created_time__month=post_date.month).count()    post_date_dict[post_date] = post_date_count

  方法二:加入模板标签,在post_tags.py文件添上

@register.simple_tagdef get_date_post(year, month):    """        作用:获取该年月下的博客        year:模板传递的年份        month:模板传递的月份    """    post_list = Post.objects.all().filter(created_time__year=year, created_time__month=month)    return post_list[:15]@register.simple_tagdef get_date_to_month(post_date):    """        作用:将日期格式转换成年月的形式        obj: 对应的post_date    """    return (str(post_date.year) +'年' + str(post_date.month) + '月')@register.simple_tagdef get_date_count(year, month):    """        作用:获得该年月下的博客数量        year: 模板传递的年份        month:模板传递的月份     """    return Post.objects.filter(created_time__year=year, created_time__month=month).count()

  ​前端代码实现

{% for post_date in date_list %}    {% get_date_post post_date.year post_date.month as post_list %}    
{% empty %}

暂无分类!

{% endfor %}

  原文出处:,文章的更新编辑以此链接为准。欢迎关注源站文章!

转载于:https://www.cnblogs.com/djcoder/p/10746374.html

你可能感兴趣的文章
Spring Cloud微服务笔记(五)Feign
查看>>
C语言键盘按键列表
查看>>
Codeforces Round #374 (Div. 2)
查看>>
oracle数据类型
查看>>
socket
查看>>
Vue中使用key的作用
查看>>
二叉索引树 树状数组
查看>>
日志框架--(一)基础篇
查看>>
Java设计模式之原型模式
查看>>
Spring学习(四)-----Spring Bean引用同xml和不同xml bean的例子
查看>>
哲理故事与管理之道(20)-用危机激励下属
查看>>
关于源程序到可运行程序的过程
查看>>
wepy的使用
查看>>
转载:mysql数据库密码忘记找回方法
查看>>
scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
查看>>
面向对象1
查看>>
在ns2.35中添加myevalvid框架
查看>>
【贪心+DFS】D. Field expansion
查看>>
为什么要使用href=”javascript:void(0);”
查看>>
二进制文件的查看和编辑
查看>>