我的网站搭建: (第五天) 分类和归档

简介:  文章分类和日期归档能帮助我们快速定位到想要查找内容,所以今天就是要实现分类以及归档,先从分类开始。    在blog/views.

 文章分类日期归档能帮助我们快速定位到想要查找内容,所以今天就是要实现分类以及归档,先从分类开始。

    在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)

    方法二:使用模板标签,简单使用方法如:Django入门: (第十二天) 自定义过滤器和标签   

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

from django import template
from blog.models import Post

register = template.Library()


@register.simple_tag
def get_category_post(category):
    """
        作用:获取该目录下的所有博客
        obj:模板传递的参数,也就是category
    """
    post_list = Post.objects.filter(category=category)
    return post_list[0:15]


@register.simple_tag
def 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 %}
    <div class="col-sm-4">
        <div class="category">

            <h4>
                <a href="{% url 'blog:category' category.pk %}">
                    <span class="glyphicon glyphicon-file"></span>&nbsp;&nbsp;{{ category }}&nbsp;({% get_category_count category %})
                </a>
            </h4>

            <div>
                {% for post in post_list %}
                    <div class="light-blog"><a href="{% url 'blog:detail' post.id %}">{{ post }}</a></div>
                {% empty %}
                    <h5>暂无博客</h5>
                {% endfor %}
            </div>

        </div>
    </div>
{% empty %}
    <h3>暂无分类!</h3>
{% 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_tag
def 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_tag
def get_date_to_month(post_date):
    """
        作用:将日期格式转换成年月的形式
        obj: 对应的post_date
    """
    return (str(post_date.year) +'年' + str(post_date.month) + '月')

@register.simple_tag
def 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 %}

    <div class="col-xs-12 col-sm-4">
        <div class="category">
            <h4>
                <a href="{% url 'blog:date' post_date.year post_date.month %}" style="color: #333; font-weight: bold" >
                    <span class="glyphicon glyphicon-book"></span>&nbsp;&nbsp;{% get_date_to_month post_date %}&nbsp;({% get_date_count post_date.year post_date.month %})
                </a>
            </h4>

            <div>
                {% for post in post_list %}
                    <div class="light-blog">
                        <a href="{% url 'blog:detail' post.id %}">{{ post }}</a>
                    </div>
                {% empty %}
                    <h5>暂无博客</h5>
                {% endfor %}
        </div>
    </div>
</div>
{% empty %}
    <h3>暂无分类!</h3>
{% endfor %}
相关文章
|
4月前
|
数据安全/隐私保护
雾锁王国搭建、存档、使用常见问题汇总(持续更新)
使用雾锁王国的常见问题,例如怎么搭建私服、搜索不到服务器怎么办、存档数据怎么迁移.......
3115 1
雾锁王国搭建、存档、使用常见问题汇总(持续更新)
|
4月前
|
弹性计算 定位技术 数据安全/隐私保护
2024年雾锁王国(Enshrouded)主机搭建教程:详细步骤+图文指导
《雾锁王国》于2024年1月24日正式在Steam平台发售,四天内销量突破100万份,成为Steam史上销量突破百万套第二快的生存建造类游戏。游戏以其独特的建造系统和地图探险功能深受玩家喜爱,特别是对于建造狂人和探险家来说,这款游戏更是不可多得的选择。 本文将为大家分享基于阿里云服务器10秒钟完成雾锁王国游戏服务器搭建教程,让大家的游戏体验更加顺畅。
|
存储 安全 程序员
个人关于阿里云存储使用的心得体会
众所周知,阿里云存储是国内领先的云存储服务提供商,其提供的存储服务包括对象存储(OSS)、文件存储(NAS)等多种形式,可以满足不同场景下的存储需求。我作为一名程序员,个人在工作中经常使用阿里云存储服务,下面分享一下个人关于阿里云存储服务使用的心得体会。
480 1
个人关于阿里云存储使用的心得体会
|
数据可视化
DataV 7.0升级详解(3)-- 三个补救小妙招
在DataV 7.0 升级中,新增了三个补救功能:「回收站」「历史记录」「快照管理-可回滚」
DataV 7.0升级详解(3)-- 三个补救小妙招
|
4月前
|
存储 关系型数据库 Serverless
大咖与小白的日常:高性价比的数据归档解决方案
本文为您介绍一个全新数据归档方案(DMS + AnalyitcDB PostgreSQL),帮助客户用低价格实现海量数据的持久化,还可以对归档数据进行完善管理、高效寻回、查看并进行分析。
大咖与小白的日常:高性价比的数据归档解决方案
|
SQL 数据库
yyds,SQL基础简单测评20题
yyds,SQL基础简单测评20题
178 0
|
文字识别 搜索推荐 数据安全/隐私保护
解救C盘!5款以一顶十的在线工具网站
C盘爆满,电脑上安装了很多乱七八糟的软件。 不舍得卸载,C盘空间不足又严重影响使用体验。
解救C盘!5款以一顶十的在线工具网站
|
容器
零起点入门系列教程③:创建一个简单的在线审批流程
【零起点入门系列教程】将会带给大家从业务视角出发由浅入深地学习用宜搭实现应用搭建。即便是没有任何代码基础的新手只要跟着系列课程,从0开始慢慢修炼,也能找到成功搭建应用的乐趣。今天第三讲,分步教学,快速创建一个简单的审批流程。
2573 1
零起点入门系列教程③:创建一个简单的在线审批流程
|
数据采集 前端开发 数据管理
零起点入门系列教程④:创建一个简单的在线审批流程
【零起点入门系列教程】将会带给大家从业务视角出发由浅入深地学习用宜搭实现应用搭建。即便是没有任何代码基础的新手只要跟着系列课程,从0开始慢慢修炼,也能找到成功搭建应用的乐趣。今天第四讲,如何用宜搭实现数据管理。
1510 0
零起点入门系列教程④:创建一个简单的在线审批流程
|
SQL Cloud Native 安全
阿里云产品精选内容合集(三)| 安全,稳定,迅速!不可错过的阿里云数据库最新资讯。
本合集精选开发者社区阿里云数据库内容,助你更快更好的了解阿里云数据库近况及发展。
下一篇
DDNS