【发布时间】:2018-02-27 20:04:50
【问题描述】:
我一直在寻找在渲染之前分配变量的方法,但没有找到任何东西。
在 PHP 中,我可以在渲染模板之前分别在任何函数中这样做,我只需要 $tpl 对象:
$tpl->assign('a', $a);
$tpl->output(...);
因此处理从@app.route返回输出或使用Flask将变量分配给模板等过程非常困难
例如,如果用户启用了 javascript,我想处理消息报告(返回或分配变量),如果用户执行 ajax 请求,它返回 json 字符串,如果没有,则将变量分配给模板。
这是我的代码
@admin.route('/login')
def login():
...
if form.validate_on_submit():
return helper.msg_report(...)
return render_template('login.pug', **locals())
def msg_report(ajax, type, msg):
if not ajax:
# need to assign msg variable to template here
else:
res = dict()
res['error'] = dict()
res['error']['message'] = mark_msg('error', msg)
return json.dumps(res)
【问题讨论】:
-
您可以在模板代码中使用分支。我认为没有充分的理由提前分配值。
-
@OluwafemiSule 很好的理由是你可以分离代码,在这种情况下,一个可重用的代码来处理错误消息。使用 PHP,我只需要几行代码,使用 Python + Flask,我不知道该怎么做,它也破坏了面向对象的设计——没有模板对象!我已经用 Flask-Admin、Wtforms 等 Flask 测试了许多表单视图......他们都没有用 ajax 完成一项工作。
-
Jinja 很健壮。您可以选择性地
include(有一个包含指令) 可重复使用的错误模板。有一个模板对象,它只是抽象出来的,因为你真的不需要处理它。 -
@OluwafemiSule 那么我如何访问该模板对象?我知道模板引擎是如何工作的,但是让我们尝试解决我的情况,ajax 表单验证它必须手动从代码返回结果,因为我没有看到
flask-*支持的 ajax 东西 -
什么样的结果?
标签: python variables flask template-engine