Python 如何在WTForms中呈现可变长度的字段列表?
我正在尝试制作一个表格来填充日历。日历可以是五天或七天,我想将天数作为参数传递给表单。我的表格定义如下:Python 如何在WTForms中呈现可变长度的字段列表?,python,python-2.7,jinja2,flask-wtforms,wtforms,Python,Python 2.7,Jinja2,Flask Wtforms,Wtforms,我正在尝试制作一个表格来填充日历。日历可以是五天或七天,我想将天数作为参数传递给表单。我的表格定义如下: class LoadForecastForm(Form): def __init__(self, n_days, *args, **kwargs): self.n_days = n_days super(LoadForecastForm, self).__init__(*args, **kwargs) self.day_values
class LoadForecastForm(Form):
def __init__(self, n_days, *args, **kwargs):
self.n_days = n_days
super(LoadForecastForm, self).__init__(*args, **kwargs)
self.day_values = FieldList(SelectField('Day Values', coerce=str, choices=[('low', 'Low'), ('medium', 'Medium'), ('high', 'High'), ('holiday', 'Holiday')]), min_entries=n_days, max_entries=n_days)
self.send = SubmitField('Send Calendar')
<form role="form" action="" method="POST">
{{ form.hidden_tag() }}
<div class="form-group row">
{% for field in form.day_values %}
<div class="col-sm-2">
<div class="form-group{% if field.errors %} error {% endif %}">
{% if label %}
{{ field.label }}
{% endif %}
{{ field(**kwargs) }}
{% for error in field.errors %}
<span class="help-inline">[{{error}}]</span><br>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
{{ form.send }}
它是这样呈现的:
class LoadForecastForm(Form):
def __init__(self, n_days, *args, **kwargs):
self.n_days = n_days
super(LoadForecastForm, self).__init__(*args, **kwargs)
self.day_values = FieldList(SelectField('Day Values', coerce=str, choices=[('low', 'Low'), ('medium', 'Medium'), ('high', 'High'), ('holiday', 'Holiday')]), min_entries=n_days, max_entries=n_days)
self.send = SubmitField('Send Calendar')
<form role="form" action="" method="POST">
{{ form.hidden_tag() }}
<div class="form-group row">
{% for field in form.day_values %}
<div class="col-sm-2">
<div class="form-group{% if field.errors %} error {% endif %}">
{% if label %}
{{ field.label }}
{% endif %}
{{ field(**kwargs) }}
{% for error in field.errors %}
<span class="help-inline">[{{error}}]</span><br>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
{{ form.send }}
n_天
过去是硬编码的,字段被定义为类变量,没有\uuuu init\uuuu()
函数,没有错误。如何以编程方式正确定义字段?我使用的是Python2.7。您需要将字段定义保留在类主体中,否则在构建类时将无法获取字段定义。初始化表单实例时,可以将最大/最小条目值应用于字段列表
class F(Form):
day_values = FieldList(SelectField('Day Values',
coerce=str,
choices=[('low', 'Low'), ('medium', 'Medium'),
('high', 'High'), ('holiday', 'Holiday')]))
send = SubmitField('Send Calendar')
def __init__(self, *args, **kwargs):
ndays = kwargs.pop('n_days')
super(F, self).__init__(*args, **kwargs)
self.day_values.min_entries = n_days
self.day_values.max_entries = n_days
测试:
输出:
<select id="day_values-0" name="day_values-0"><option value="low">Low</option><option value="medium">Medium</option><option value="high">High</option><option value="holiday">Holiday</option></select>
<select id="day_values-1" name="day_values-1"><option value="low">Low</option><option value="medium">Medium</option><option value="high">High</option><option value="holiday">Holiday</option></select>
<select id="day_values-2" name="day_values-2"><option value="low">Low</option><option value="medium">Medium</option><option value="high">High</option><option value="holiday">Holiday</option></select>
<select id="day_values-3" name="day_values-3"><option value="low">Low</option><option value="medium">Medium</option><option value="high">High</option><option value="holiday">Holiday</option></select>
LowMediumHighHoliday
低中高假日酒店
低中高假日酒店
低中高假日酒店
您需要将字段定义保留在类主体中,否则在构建类时将无法获取字段定义。初始化表单实例时,可以将最大/最小条目值应用于字段列表
class F(Form):
day_values = FieldList(SelectField('Day Values',
coerce=str,
choices=[('low', 'Low'), ('medium', 'Medium'),
('high', 'High'), ('holiday', 'Holiday')]))
send = SubmitField('Send Calendar')
def __init__(self, *args, **kwargs):
ndays = kwargs.pop('n_days')
super(F, self).__init__(*args, **kwargs)
self.day_values.min_entries = n_days
self.day_values.max_entries = n_days
测试:
输出:
<select id="day_values-0" name="day_values-0"><option value="low">Low</option><option value="medium">Medium</option><option value="high">High</option><option value="holiday">Holiday</option></select>
<select id="day_values-1" name="day_values-1"><option value="low">Low</option><option value="medium">Medium</option><option value="high">High</option><option value="holiday">Holiday</option></select>
<select id="day_values-2" name="day_values-2"><option value="low">Low</option><option value="medium">Medium</option><option value="high">High</option><option value="holiday">Holiday</option></select>
<select id="day_values-3" name="day_values-3"><option value="low">Low</option><option value="medium">Medium</option><option value="high">High</option><option value="holiday">Holiday</option></select>
LowMediumHighHoliday
低中高假日酒店
低中高假日酒店
低中高假日酒店