【发布时间】:2016-04-19 22:42:04
【问题描述】:
我正在使用Flask 和Jinja2 templating engine 来构建网站。作为 ORM,我使用(优秀的)Peewee ORM,我现在遇到了问题。
在我的 Flask 视图中,我从数据库中获取了用户列表:
@app.route('/stats')
def stats():
users = User.select()
return render_template('stats.html', users=users)
在我的模板中,我遍历用户并尝试扩展查询。这有效:
{% for user in users %}
{{ user.app_logs.where(AppLog.type == 'LOGIN').first().created }}
{% endfor %}
但是这个:
{% 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。所以我尝试用反斜杠 (\|) 转义它,但这不起作用。
所以我的问题是:有没有办法以某种方式逃避管道符号,或者是否有人有任何其他想法来完成这项工作?欢迎所有提示!
【问题讨论】:
-
我不知道 Peewee,但看起来它有一个
<<运算符,可以转换为IN,所以user.app_logs.where(AppLog.type << ['LOGIN', AppLog.TICKET])不能工作吗? -
@DanielRoseman - 旁边是一个更好的查询,这是个好主意。但不幸的是,这也不起作用:
TemplateSyntaxError: unexpected '<'。感谢您使用IN进行此查询的提示! -
在你的
User模型上写一个方法并从你的模板中调用这个方法。
标签: python templates flask jinja2 peewee