我希望能够根据发布日期对我的帖子(页面)进行排序。我是这样做的。对于每一页,我都按日期排序,并选择前三页。
@application.route('/')
def index():
latest = sorted(pages, reverse=True, key=lambda p: p.meta['date'])
return render_template('index.html', pages=latest[:3])
一个简单的页面(.md)看起来像这个
title: Albums I liked (2015)
date: 2015-12-20
(..other metadata and content)
但是我得到以下错误
latest = sorted(front, reverse=True,key=lambda p: p.meta['date'])
TypeError: can't compare datetime.date to str
我怎样才能正确地对它们进行分类?
编辑:我使用https://pythonhosted.org/Flask-FlatPages/
您在以下行中收到此错误:
latest = sorted(front, reverse=True,key=lambda p: p.meta['date'])
因为CCD_ 1具有包含CCD_ 2中的数据类型的混合类型的对象。要解决此错误,请确保所有日期都是datetime.date
类型或str
类型。
.md中的数据更有可能是字符串,日期:2015-12-20分别是字符串。您应该在排序之前将此日期转换为日期时间,以实现目标。我不确定你是否可以在lambda:中完成
from datetime import datetime
latest = sorted(front, reverse=True,key=lambda p: datetime.strptime(p.meta['date'], '%Y-%m-%d'))
但如果这不可能,你可能应该把.md加载到一个list()中,在那里日期也被转换为datetime,然后进行排序
list = []
for p in data:
p.meta['date'] = datetime.strptime(p.meta['date'], '%Y-%m-%d')
list.append(p)
latest = sorted(list, reverse=True,key=lambda p: p.meta['date'])
我只将日期元数据转换为字符串就解决了这个问题。这对我来说很顺利。这里的新东西是str()
latest = sorted(front, reverse=True, key=lambda p: str(p.meta['date']))