python - Django blog 实现文章自动归档有什么优雅的方法么?
本文介绍了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屋!
查看全文