2017-01-28 4 views
1

私はWagtailの寄稿Form Builderモジュールを使って、Wagtail Adminの簡単な連絡先フォームを作成しました。フォームに動的に追加されたフィールドがある名前,メール,件名およびメッセージ;モデルContactPageAbstractFormから継承されます。Wagtail FormBuilder - ランディングテンプレートでフォームデータを使用する方法は?

問題:私はお問い合わせフォームを使用し、ユーザへの応答メッセージをパーソナライズするフィールドに入力した名前を使用したい

。フォームビルダーのWagtailのRead The Docsページにはがform_page.htmlテンプレートのコンテキストの一部であり、form_page_landing.htmlテンプレートは標準テンプレートであると記載されています。何らかの形でランディングテンプレートの文脈からフォーム提出された値にアクセスすることは可能ですか?そうでない場合は、コンテキストに必要な情報を追加するために、誰にどのように/どのページ関数を上書きするかの例を与えることができますか?ありがとう!

答えて

1

ワグテールは、そのフォームページをAbstractFormhttps://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コンテキスト変数があります:それは、このような何かをランディングページの内容を更新しますので、カスタムフォームクラスにこのメソッドをオーバーライドすることができます!

関連する問題