如何使用Flask中的管道/Jinja模板与过滤器不同?

2024-06-08 21:34:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我用FlaskJinja2 templating engine来建立一个网站。作为ORM,我使用(优秀的)Peewee ORM,现在遇到了一个问题。在

在我的烧瓶视图中,我从数据库中得到了一个用户列表:

@app.route('/stats')
def stats():
    users = User.select()
    return render_template('stats.html', users=users)

在我的模板中,我遍历用户并尝试扩展查询。这是有效的:

^{pr2}$

但是这个:

{% for user in users %}
    {{ user.app_logs.where((AppLog.type == 'LOGIN') | (AppLog.type == AppLog.TICKET)).first().created }}
{% endfor %}

给出一个TemplateSyntaxError: expected token 'name', got '('。我理解错误的来源:管道符号(|)被定义为a filter in Jinja。所以我试着用反斜杠(\|)来转义它,但是没有用。在

所以我的问题是:有没有一种方法可以摆脱管道符号,或者有人有任何其他的想法来实现这一点?欢迎所有提示!在


Tags: 用户inappjinja2flask管道statstype
1条回答
网友
1楼 · 发布于 2024-06-08 21:34:09

在任何情况下,保持模板“哑”并在模板之外执行查询是一个更好的做法。在您的例子中,您可以使用playhouse extension to use hybrid attributes on the model。在

class User(Model):
    ...

    @hybrid_property
    def applog_login_ticket(self):
        return self.app_logs.where((AppLog.type == 'LOGIN') | (AppLog.type == AppLog.TICKET)).first().created()

然后在你的模板中你可以

^{pr2}$

相关问题 更多 >