Flask. Как динамически задавать приглашения в форме
Делаю загрузку файлов, хотя это не важно. Вот обычный вариант работает:
from flask_wtf import Form
from wtforms import FileField, SubmitField, ValidationError
class UploadForm(Form):
xl_data_file = FileField('Задайте *.xls файл')
submit = SubmitField('Отправить')
Все работает. Мне хочется на разных ветках использоватиь разные подсказки 'Задайте *.xls файл', 'Задайте *.doc файл', 'Задайте *.jpg файл'. Не подскажите как это сделать?
Я попробовал так:
class UploadForm(Form):
def __init__(self, text):
self.xl_data_file = FileField(f'Задайте *.{text} файл')
self.submit = SubmitField('Отправить')
При этом заменив где надо form = UploadForm() на form = UploadForm(file). Но получил ошибку AttributeError: 'UploadForm' object has no attribute '_fields' во время выполнения...
В нете про эту ошибку я за 15 минут ничего не нарыл (возможно потому что я новичек в Flask).
Итого два вопроса.
1) как получить желаемое
2) что это за ошибка
...
Конечно, я могу создать три класса.)
Видимо, необходимо запустить родной инит, так как я "переписал" его.
Вариант
class UploadForm(Form):
def __init__(self, text):
super().__init__()
self.xl_data_file = FileField('Задайте *.xls файл')
self.submit = SubmitField('Отправить')
не выводит форму, а вариант
class UploadForm(Form):
def __init__(self, text):
super().__init__(self)
self.xl_data_file = FileField('Задайте *.xls файл')
self.submit = SubmitField('Отправить')
выдает ошибку AttributeError: 'UploadForm' object has no attribute 'getlist'
Ответы (1 шт):
class UploadForm(Form):
# Поля обязательно нужно оставить среди переменных самого класса
xl_data_file = FileField('Задайте *.xls файл')
submit = SubmitField('Отправить')
# Можно объявить свой init, но не объявлять в нем поля формы
def __init__(self, text=None):
super().__init__()
if text:
# А переопределить атрибут label у существующего поля
self.xl_data_file.label.text = text
В коде обработчиков, перед тем, как отобразить шаблон:
form = UploadForm('Задайте *.doc файл')
# Даже так, если на ходу передумал, тогда и init не нужен
form.xl_data_file.label.text = 'Задайте *.ptt файл'