Я пробовал почти целый день при простом рендеринге поля формы. Было бы здорово, если бы вы могли помочь мне в этом.SelectField WTForm рендеринг на шаблоне
Я использую Flask-WTF, python 2.7.
Я пытаюсь отобразить SelectField с помощью специального ListWidget. Поле в основном должно быть представлено в HTML-теге UL, а не в теге SELECT html, и, похоже, это то, с чем я борюсь.
Это как мой пользовательский класс виджета:
widget.py
class CustomListWidget(ListWidget):
def __init__(self, *args, **kwargs):
super(CustomListWidget, self).__init__(*args, **kwargs)
def __call__(self, field, **kwargs):
kwargs.setdefault('id', field.id)
html = ['<{} {}>'.format(self.html_tag, html_params(**kwargs))]
for subfield in field:
html.append('<li><span>{}</span></li>'.format(subfield()))
html.append('</{}>'.format(self.html_tag))
return HTMLString(''.join(html))
Это как моя форма выглядит, а поле категории является один я борюсь с.
form.py
from widget import CustomListWidget
from wtforms import SelectField, SubmitField
widget = CustomListWidget(html_tag='ul')
class MyForm(Form):
category = SelectField('category', [DataRequired()], widget=widget, default='1', choices=[
('1', 'whatever'),
('2', 'whatever2')
])
submit = SubmitField('Search')
view.py
from form import MyForm
from flask import render_template
@app.route('/formtest', methods=['GET', 'POST'])
def formtest():
form = MyForm()
if request.method == 'GET':
render_template('form.html', form=form)
if form.validate_on_submit():
return redirect(url_for('whatever', data=-form.data))
return 'form not validated'
form.html
<div class="search-input with-dropdown">
<div class="dropdown">
{{ form.category(class='dropdown-content hide') }} }}
</div>
</div>
С помощью этого кода я могу г и ожидается ожидаемое отображение, но никакое значение не передается из поля. Какое бы значение я ни выбрал, после отправки, только значение по умолчанию есть.
Что библиотеки вы используете? Вы не можете опустить поле, так форма отправляет значения. Библиотека, вероятно, ожидает скрытое поле для хранения значения и список для его отображения. Пожалуйста, [править], чтобы включить [mcve]. – davidism
Сделаю сейчас. Спасибо за руководство. Впервые я задаю вопрос. –