如何在表单提交后加载带有值的Jinja2模板

时间:2016-02-03 09:42:38

标签: python-2.7 google-app-engine jinja2

我在Jinja2模板中有一个表单。这就是我正在尝试用它做的事情:

  • 用户提交表单后,后端的处理程序会将其排队 异步任务。
  • 然后处理程序重新加载当前页面并填写表单 用户提供的值。

最好的方法是什么? 例如,假设我的表单中有<select>输入,如下所示:

  <select id="shift_selected" name="shift_selected">
  {% for shift in Shifts %}
    <option value="{{ shift }}" {{ 'selected' if shift == selected_shift }}>{{ shift }}</option>
  {% endfor %}
  </select>

现在,在提交表单后重新呈现页面,

  • 我的处理程序必须解析输入,获取'shift_selected'的值

  • 然后设置'selected_shift'的值。

args ['selected_shift'] = self.request.get(“selectedShift”)

template.render(args)

处理程序实质上接收表单值中的一些数据,并将相同的数据作为模板变量值发回。有一个更好的方法吗。如果用于长形式,这种方法非常繁琐。

1 个答案:

答案 0 :(得分:1)

实际上,您甚至可以将request对象作为参数传递给Jinja模板。或编写一个函数将request中的所有GET或POST参数复制到Jinja模板参数。

args['request'] = self.request
template.render(args)

<select id="shift_selected" name="shift_selected">
{% for shift in request.get('selectedShift') %}
    <option value="{{ shift }}" {{ 'selected' if shift == selected_shift }}>{{ shift }}</option>
{% endfor %}
</select>