나는 이것에 대한 더 나은 해결책을 찾으려고 노력하고 있습니다. 내 솔루션은 이제 매우 어색합니다 (그러나 작동합니다). 왜냐하면 20 개의 선택 필드를 원하면 ... 템플릿이 얼마나 끔찍하고 길게 보일지 상상할 수 있습니다 ...
그래서 기본적으로 내가 묻는 것은 SelectFieldArray 객체가 존재하는 것입니다. WTForm에서? 나는 문서에서 찾지 못했습니다.
그래서 여기 내 어색한 해결책
이 있습니다.
form = ResultForm()
if form.validate_on_submit():
print form.f1.data
print form.f2.data
내 템플릿 :
{% extends "base.html" %}
{% block body %}
<form method="post">
{{ form.hidden_tag() }}
<p>
<label for="title">
{{form.f1.label}}
</label><br/>
{{form.f1}}
<label for="title">
{{form.f2.label}}
</label><br/>
{{form.f2}}
{% if form.f1.errors %}
<ul class="errors">
{% for error in form.f1.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
{% if form.f2.errors %}
<ul class="errors">
{% for error in form.f1.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</p>
<input type="submit" value="Go">
</form>
{% endblock %}
내 WTForm 클래스 :
from flask.ext.wtf import Form
from wtforms import TextField, PasswordField,SelectField,validators
from wtforms.validators import Required
class ResultForm(Form):
f1 = SelectField(u'f1',
coerce=int,
validators=[validators.optional()],
choices=[(1, 'A'),(2, 'B'),(3, 'C'),(4, 'D'),(5, 'E'),(6, 'FX'),(7, 'na')])
f2 = SelectField(u'f2',
coerce=int,
validators=[validators.optional()],
choices=[(1, 'A'),(2, 'B'),(3, 'C'),(4, 'D'),(5, 'E'),(6, 'FX'),(7, 'na')])
하나의 필드를 반복하려면 다음을 사용할 수 있습니다 wtforms.fields.FieldList
( 필드 클로저 에 대한 문서 참조 ).
class ResultForm2(BaseForm):
selects = FieldList(SelectField(u'Select', coerce=int,
validators=[validators.optional()],
choices=[(1, 'A'), (2, 'B'), (3, 'C'),
(4, 'D'), (5, 'E'), (6, 'FX'),
(7, 'na')]), min_entries=2)
그러면 이름이 "select-0"및 "selects-1"인 두 개의 선택 입력이 생성됩니다 (min_entries가 2로 설정 되었기 때문). 둘 다 동일한 데이터를 가지고 있습니다.
다음과 같이 동적으로 양식을 작성할 수도 있습니다 ( 동적 양식 작성 에 대한 문서 참조 ).
def my_dynamic_form(select_field_count=20):
class F(MyBaseForm):
pass
for i in range(select_field_count):
setattr(F, 'f%d' % i, SelectField('F%d' % i, coerce=int,
validators=[validators.optional()],
choices=[(1, 'A'), (2, 'B'), (3, 'C'),
(4, 'D'), (5, 'E'), (6, 'FX'),
(7, 'na')]))
return F
이렇게하면 양식을 완전히 동적으로 구성 할 수 있습니다. 예를 들어 SelectFields는 다른 선택을 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다