【发布时间】:2017-04-20 09:01:57
【问题描述】:
所以我试图将 Jinja2 模板中的值传递回我的 Python 代码。我正在尝试使用隐藏的输入来做到这一点。我的表单类是这样的:
class TrueOrFalseForm(flask_wtf.FlaskForm):
choice = RadioField(choices=[('True', 'TRUE'), ('False', 'FALSE')], validators=[validators.InputRequired()])
hidden = HiddenField()
submit = SubmitField('Submit')
我的表格是这样的:
<form autocomplete="off" action="" method="post">
{{ form.hidden_tag() }}
<div style="text-align: center">
<div style="display: inline-block">
{{ form.choice }}
{{ form.hidden(value="{{ result }}") }}
{{ form.submit(class_="btn btn-primary btn-lg") }}
</div>
</div>
</form>
result 是我在渲染模板时传递的字符串。
但是,当检查form.hidden.data 的值时,它返回为''。该标记也呈现为<input id="hidden" name="hidden" type="hidden" value="">。
我也尝试过使用 value={{ result }} 而不是 value="{{result}}",但这会使 Jinja 抛出 TemplateSyntaxError。
你知道怎么做吗?
编辑:
每次调用该函数时,我都会覆盖result。
这是我的路由功能:
@app.route('/', methods=['GET', 'POST'])
def home():
form = forms.TrueOrFalseForm()
x = random.randint(-100, 100)
y = random.randint(-100, 100)
statement_str = generate_statement_string(2)
tree = BinTree.build_tree(statement_str)
statement_result = BinTree.solve_tree(tree, x, y) # result gets overwritten here
if form.validate_on_submit():
if not flask_login.current_user.is_anonymous:
# same as the else, except with some sql, not relevant
else:
if form.choice.data == form.hidden.data:
flask.flash('Correct!')
else:
flask.flash('Incorrect!')
return flask.render_template('home.html', x_value=str(x), y_value=str(y), statement=statement_str,
result=str(statement_result), form=form)
【问题讨论】:
-
@jmunsch 对我不起作用,因为我更改了渲染之间的值。