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过滤器的文档,我认为您需要使用排序过滤器和属性参数: