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

标签 python templates flask jinja2 peewee

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

在我的 Flask View 中,我从数据库中获取用户列表:

@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:预期标记'name',得到'('。我明白错误来自哪里:管道符号(|)被定义为a filter in Jinja .所以我尝试用反斜杠(\|)转义它,但这不起作用。

所以我的问题:有没有办法以某种方式逃避管道符号,或者是否有人有任何其他想法来实现这项工作?欢迎所有提示!

最佳答案

无论如何,最好的做法是保持模板“哑”并在模板之外进行查询。在您的情况下,您可以使用 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()

然后在你的模板中你可以这样做

{% for user in users %}
    {{ user.applog_login_ticket }}
{% endfor %}

关于python - 如何在 Flask/Jinja 模板中使用与过滤器不同的管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34792415/

相关文章:

c++ - 模板参数推导失败

python - Flask 中的基本身份验证仅适用于一名用户

python - 对 Python 2 和 Python 3 之间的选择感到困惑

python - 迭代列表元组

python - 点子安装位置

python - 无法读取文件 STRINGS 文件 "/opt/intel/mkl/include/mkl_version.h"

c++ - 可变参数模板类中的定义数量不同

c++ - 声明嵌套类模板的静态对象

javascript - Flask 模板中的动态 HTML 转义

python - Flask:添加使用统计