python - Django blog 实现文章自动归档有什么优雅的方法么?

查看:103
本文介绍了python - Django blog 实现文章自动归档有什么优雅的方法么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

最近在用 Django 做一个个人 Blog,想实现一个文章归档功能,效果像这样:

就是首页递减显示文章发表年份,点击该年份展开显示该年下的月份。

我目前的实现思路是这样的:

首先获取全部文章的发表时间(精确到月,已去重):

date_list = Article.objects.datetimes('created_time', 'month')

然后把时间列表放到一个字典里,键是年份,值为月份列表:

date_dict = defaultdict(list)
        for d in date_list:
            print(type(d.year))
            print(type(d.month))
            date_dict[d.year].append(d.month)
        return dict(date_dict)  # 模板不支持defaultdict

在模板中循环出来:

{% for year,month_list in d.items %}
    <p>{{year}}<p>
    {% for month in month_list  %}
        <p>{{month}}<p>

能够实现部分需求,但是总觉得不优雅,其次是由于字典是无序的,可能导致显示的并非按照时间递减排序,如果要保持有序可能还得将字典改成二重列表,感觉更不优雅了。

有什么更加优雅一些的实现方法么?或者一些比较好的实践方法介绍。

解决方案

想让字典有序可用 OrderedDict


其实连 OrderedDict 也不用,直接对键排序就好了,用原生 MultiValueDict 会更优雅


来一发完整版的

from django.utils.datastructures import MultiValueDict

dct = MultiValueDict()

for obj in data_list:
    dct.appendlist(obj.year, obj.month)

tuples = sorted((key, sorted(dct.getlist(key))) for key in dct)

这篇关于python - Django blog 实现文章自动归档有什么优雅的方法么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆