Пользовательские шаблоны и проверка с помощью Deform и mako
Я использую деформацию в проекте, который использует пирамиду с мако в качестве движка шаблонов. Переписал шаблоны нужных мне виджетов. Я использую модальное окно для одной из форм, поэтому я написал шаблон мако и установил виджет формы с помощью
form.widget = widget.FormWidget(template='modal')
Форма отлично работает для первоначального рендеринга, но при вызове блока проверки
try:
appstruct = self.my_form.validate(controls)
except ValidationFailure as e:
return dict(e.render())
e
Прямо сейчас я использую это, чтобы обойти это ... он показывает предупреждение, когда есть ошибка, но не отображает конкретные ошибки в каждом поле:
except ValidationFailure as e:
form.error = e.error
form.field = e.field
return dict(form.render(e.cstruct)
1 ответ
Поиграв с ним некоторое время, я пришел к этому решению (не уверен, оптимально ли оно). Перед возвращением
e.render()
, установите атрибуты формы на
e.field
@view_config(route_name="facilities", renderer="facilities.mako")
def index(self):
form = self.form
form.widget = widget.FormWidget(template="modal")
if 'submit' in self.request.params:
try:
controls = self.request.POST.items()
appstruct = self.facility_form.validate(controls)
except ValidationFailure as e:
e.field.widget = widget.FormWidget(template="modal")
e.field.set_widgets({}) ## if using different from defaults
e.field.formid = "my-popup" ## and any other non default attributes.
return dict(form=e.render())
return dict(form=form.render())