WTForms:渲染时设置值

时间:2015-04-09 03:17:25

标签: flask wtforms flask-wtforms

可能有更好的方法可以做到这一点,但我正在尝试使用隐藏的表单来使用WTForms在Flask中定义按钮。当我尝试设置值时,似乎字段生成两次。一旦使用默认值“”,再次使用模板中设置的值。最终,在帖子中过去的回溯是两个变量的空值。

我要做的是根据分配的按钮将每个实例化的值设置为不同的值,这意味着必须在模板中完成。

这就是我所拥有的:

烧瓶应用程序中定义的表单:

class refreshInstances(Form):
    type = HiddenField('type')
    value = HiddenField('value')


def instances():
  form = refreshInstances()
   return render_template('instances.html', form=form)

模板instances.html的子集:

<form class="form" method="POST" role="form" id="updall">
            {{ form.hidden_tag() }}
            {{ form.type(value='res_id') }}
            {{ form.value(value='12345') }}
</form>
<button class='btn btn-primary btn-block' type='submit' form='updall'><span class="glyphicon glyphicon-refresh"></span> Update All</button>

呈现HTML:

<form class="form" method="POST" role="form" id="updall">
 <div>
  <input id="csrf_token" name="csrf_token" type="hidden" value="1428">
  <input id="type" name="type" type="hidden" value="">
  <input id="value" name="value" type="hidden" value="">
 </div>
 <input id="type" name="type" type="hidden" value="res_id">
 <input id="value" name="value" type="hidden" value="cjohnson">
</form>
<button class="btn btn-primary btn-block" type="submit" value="submit" form="updall"><span class="glyphicon glyphicon-refresh"></span> Update All</button>

2 个答案:

答案 0 :(得分:2)

您是否要typevalue以一种形式渲染两次?如果不是,则问题在于form.hidden_tag()会渲染所有隐藏字段,包括csrf_tokentypevalue。假设您使用的是csrf_token(除非有充分的理由,否则一个好主意),将form.hidden_tag()替换为form.csrf_token()

<form class="form" method="POST" role="form" id="updall">
            {{ form.csrf_token()         }}
            {{ form.type(value='res_id') }}
            {{ form.value(value='12345') }}
</form>
<button class='btn btn-primary btn-block' type='submit' form='updall'><span class="glyphicon glyphicon-refresh"></span> Update All</button>

答案 1 :(得分:0)

我认为这段代码可以解决您的问题。 你应该根据需要调整它。

def instances():
    form = refreshInstances()
    form.type.default = 123
    form.value.default = 456
    form.process()
    return render_template('instances.html', form=form)

<form class="form" method="POST" role="form" id="updall">
    {{ form.hidden_tag() }}
    {{ form.type }}
    {{ form.value }}
</form>