Пользовательские шаблоны и проверка с помощью 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())
Другие вопросы по тегам