2017-01-28 9 views
1

Я использовал модуль компоновщика форм Wagtail для создания простой формы контактов в Wagtail Admin. В форме с динамически добавленными полями Наименование, Email:, Тема: и Сообщение; модель ContactPage наследует от AbstractForm.Wagtail FormBuilder - как использовать данные формы в шаблоне посадки?

Проблема:

Я хотел бы использовать введенное имя в поле Имя персонализировать ответное сообщение пользователю, который использовал контактную форму. Страница Wagtail's Read The Docs на построителе форм утверждает только, что form является частью контекста для шаблона form_page.html, а шаблон form_page_landing.html - это стандартный шаблон. Возможно ли получить доступ к представленным формам значениям через контекст шаблона посадки из коробки? Если нет, может ли кто-нибудь привести пример того, как/какая функция страницы переопределить, чтобы добавить информацию, которая мне нужна для контекста? Благодаря!

ответ

1

Wagtail обслуживает страницы своих форм через AbstractForm (https://github.com/wagtail/wagtail/blob/master/wagtail/wagtailforms/models.py#L154) и, в частности, его метод serve. Этот метод проверяет, является ли HTTP-метод «POST», поэтому он либо обрабатывает форму, либо возвращает целевую страницу, либо отображает фактическую форму. Вы можете переопределить этот метод для пользовательского класса формы, так что обновляет контекст целевой страницы, что-то вроде этого:

 
    def serve(self, request, *args, **kwargs): 
     if request.method == 'POST': 
      form = self.get_form(request.POST, page=self, user=request.user) 

      if form.is_valid(): 
       self.process_form_submission(form) 

       # Update the original landing page context with other data 
       landing_page_context = self.get_context(request) 
       landing_page_context['name'] = form.cleaned_data['name'] 

       return render(
        request, 
        self.get_landing_page_template(request), 
        landing_page_context 
       ) 
     else: 
      form = self.get_form(page=self, user=request.user) 

     context = self.get_context(request) 
     context['form'] = form 
     return render(
      request, 
      self.get_template(request), 
      context 
     ) 

Теперь контекста целевой страницы будет иметь переменную name контекста, содержащее значение поля формы имени !

 Смежные вопросы

  • Нет связанных вопросов^_^