【问题标题】:Sort pages in Flask - TypeError在 Flask 中对页面进行排序 - TypeError
【发布时间】:2016-01-02 12:03:21
【问题描述】:

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

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

【问题讨论】:

    标签: python python-2.7 sorting flask


    【解决方案1】:

    您在该行中收到此错误:

    latest = sorted(front, reverse=True,key=lambda p: p.meta['date'])
    

    因为front 的对象包含p.meta 中的混合数据类型。要解决此错误,请确保所有日期均为 datetime.date 类型或 str 类型。

    【讨论】:

    • 你说的没错,我的日期如下(2015-07-5)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我只是通过将日期元数据转换为字符串来解决这个问题。这对我来说很顺利。这里的新东西是str()

      latest = sorted(front, reverse=True, key=lambda p: str(p.meta['date']))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-22
        • 2016-05-03
        • 2014-08-24
        • 2018-01-31
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        相关资源
        最近更新 更多