Python 对模板中的外键项进行排序

Python 对模板中的外键项进行排序,python,jinja2,peewee,Python,Jinja2,Peewee,以下代码适用于应用程序: user.tweets.order_by(Tweet.message) 以下代码在jinja2模板中工作: {% for tweet in user.tweets %} {% for tweet in user.tweets.order_by(Tweet.message) %} 但以下代码在模板中失败: {% for tweet in user.tweets %} {% for tweet in user.tweets.order_by(Tweet.messag

以下代码适用于应用程序:

user.tweets.order_by(Tweet.message)
以下代码在jinja2模板中工作:

{% for tweet in user.tweets %}
{% for tweet in user.tweets.order_by(Tweet.message) %}
但以下代码在模板中失败:

{% for tweet in user.tweets %}
{% for tweet in user.tweets.order_by(Tweet.message) %}
除了将以下方法添加到
User
类之外,还有没有更干净的方法对jinja2模板中的tweet进行排序

def tweets_by_message(self):
    return user.tweets.order_by(Tweet.message)

这种方法没有错,但是每次我需要不同的顺序时添加一个小方法听起来不太正确。

也许你可以将
Tweet
放到模板上下文中。或者更好的方法是,使用上下文处理器将所有模型转储到模板上下文中,以便它们始终可用

@app.context_processor
def _inject_models():
    return {
        'Tweet': Tweet,
        'User': User,
        'Foo': Foo,
    }

我不知道这是否有效,但可能值得一试吗?

我想你正在寻找这个:

{% for tweet in user.tweets|sort(attribute='message') %}

你一开始说“以下代码在应用程序中工作”是什么意思?什么样的申请?参考jinja2过滤器的文档,我认为您需要使用排序过滤器和属性参数: