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

时间:2016-01-02 12:03:22

标签: python python-2.7 sorting flask

我希望能够根据发布日期对帖子(页面)进行排序。 这就是我的所作所为。对于每个页面,我按日期排序并选择前三个。

@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/

3 个答案:

答案 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']))