对Flask中的页面进行排序-TypeError



我希望能够根据发布日期对我的帖子(页面)进行排序。我是这样做的。对于每一页,我都按日期排序,并选择前三页。

@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']))

最新更新