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

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

hot3.png

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

    在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 %}                    
{
{ post }}
                {% 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 %}    
        
            

                
                    
  {% get_date_to_month post_date %} ({% get_date_count post_date.year post_date.month %})                            

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

暂无分类!

{% endfor %}

转载于:https://my.oschina.net/zhenfei/blog/1933480

你可能感兴趣的文章
scala中隐式转换之隐式值和隐式视图
查看>>
Java 实例
查看>>
weblogic多池与oracle集群RAC
查看>>
php类库安装xml simplexml
查看>>
Asp.Net SignalR Hub集线器
查看>>
关于集成抽取进程重启后的现象分析
查看>>
56.如何清除已经设置的npm config配置
查看>>
028——VUE中事件修饰符once
查看>>
FineUIPro v5.1.0 发布了!
查看>>
easyui的日期控件
查看>>
[WPF 容易忽视的细节] —— Exception in WPF's Converter
查看>>
网易严选的wkwebview测试之路
查看>>
Dubbo高可用
查看>>
折叠代码块 C#中用 #region和#endregion java中用 //region和//endregion
查看>>
高性能mysql学习笔记
查看>>
[ffmpeg] 音频样本
查看>>
jQuery 3D圆盘旋转焦点图 支持鼠标滚轮
查看>>
非常实用全面的 C++框架,库类等资源
查看>>
VS Code 常用插件
查看>>
kubectl top查看k8s pod的cpu , memory使用率情况
查看>>