我希望能够根据发布日期对帖子(页面)进行排序。 这就是我的所作所为。对于每个页面,我按日期排序并选择前三个。
@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
我如何正确地对它们进行排序?
答案 0 :(得分:1)
.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'])
答案 1 :(得分:1)
您收到此错误:
latest = sorted(front, reverse=True,key=lambda p: p.meta['date'])
因为front
的对象包含p.meta
中混合类型的数据类型。要解决此错误,请确保所有日期均为datetime.date
类型或str
类型。
答案 2 :(得分:0)
我通过将日期元数据转换为字符串来解决这个问题。这对我很顺利。这里的新内容是str()
latest = sorted(front, reverse=True, key=lambda p: str(p.meta['date']))