我无法找出此代码与StringField
一起使用的原因,但不能与HiddenField
一起使用。添加变量date2
仅用于调试问题。
(实际上,我可以把StringField留在那里,但我花了一些时间才找到问题,我想了解错误是为了不重复错误)
表格定义:
DAYS = 10
class _OneDayForm(Form):
alarmtime = StringField(validators=[Optional(), validate_time])
date2 = StringField() # json encoded [Y,M,D]
date = HiddenField() # json encoded [Y,M,D]
class _PerDayForm(Form):
days = FieldList(FormField(_OneDayForm), min_entries=DAYS)
submit = SubmitField()
Jinja2模板:
<input name="{{ subform.date.name }}" type="hidden" value="{{ ymd }}">
<input name="{{ subform.date2.name }}" type="hidden" value="{{ ymd }}">
生成的HTML:
<input name="days-0-date" type="hidden" value="[2016, 12, 7]">
<input name="days-0-date2" type="hidden" value="[2016, 12, 7]">
StringField date2
会返回其值,但HiddenField date
不会。我尝试交换它们以确保StringField
与HiddenField
确实是唯一的区别。
答案 0 :(得分:2)
为了记录,我找到了错误:
我使用{{ subform.hidden_tag() }}
来显示CSRF令牌,但它做的不止于此(我不知道):
如果您的表单有多个隐藏字段,则可以将其渲染为一个 阻止使用hidden_tag()。
所以我的隐藏场被渲染了两次,第一次没有价值。