2016-05-22 11 views
0

WagtailフォームビルダでSubscribeフォームを作成しました。テンプレートsubscribe_form.htmlからフォームを送信すると、送信が正常に完了します。includeタグ使用時にフォームが送信されない

<form action="{% pageurl page %}" method="POST"> 
    {% csrf_token %} 
    <div class="shop-subscribe bg-color-green margin-bottom-40"> 
     <div class="container"> 
       <div class="row"> 
        <div class="col-md-8 md-margin-bottom-20"> 
          <h2>Subscribase para mantenerse<strong> informado</strong></h2> 
        </div> 




        <div class="col-md-4"> 
          <div class="input-group"> 


          <input type="text" class="form-control" placeholder="Correo Electronico..." {{ form.subscribase }}> 
            <span class="input-group-btn"> 
              <button class="btn" type="submit"><i class="fa fa-envelope-o"></i></button> 
            </span> 

          </div> 

           {{ form.subscribase.errors }} 
         </div> 
       </div> 
     </div><!--/end container--> 
    </div> 

</form> 

私は他のページでそれを含めるために含まれたタグを使用する場合しかし、それは提出していない、と私はすべてのエラーメッセージを得ることはありません。

{% include "home/subscribe_form.html" %} 

includeタグを使用している場合にフォームが送信されない原因について助言してもらえますか?

+3

テンプレートをそのような場所に含めることはできません。テンプレートはフォームを持つ 'Page'モデルで起こる' form'、 'page'変数を持つ適切なコンテキストで呼び出さなければなりません。 – solarissmoke

+1

@ solarissmokeは正しいと言いました。フォームとページを初期化するテンプレートタグを作成することをお勧めします - https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/ – dotcomly

+0

@solarissmoke、達成するために必要なプロセスを明確にしてくれてありがとうこの。 – Leo

答えて

1

他の人の言葉を詳しく説明するには、カスタムテンプレートタグを使用するのが簡単な方法です。インクルードタグを使用すると、テンプレートタグを呼び出してargs/kwargsを渡したり、ロジックを実行したり、レンダリングされたページに含めるためにそのロジックを持つテンプレートをレンダリングすることができます。その後、あなたのプロジェクトのためのアプリケーションディレクトリで

フォルダを作成し、templatetagsという名前のディレクトリを作成し、__init__.pyという名前のその内の空のファイルを作成します(Djangoは、ファイルが起動時に実行する必要があります知ってこれを使用しています)、そして中に別のファイルを作成します新しいディレクトリ名my_custom_tags.py(または使用したいもの)を入力します。今that-

from django.template import Library 

register = Library() 

@register.inclusion_tag("home/subscribe_form.html") 
def subscription_form(form): 
    return {'form':form} 

の中で、あなたのメインテンプレートに:

{% load my_custom_tags %} 
{# (or whatever you named your file for custom tags #} 

{# where you want to include your tag, pass the form from the main template; be sure to pass your form variable from your context data #} 
{% subscription_form form %} 

あなたのフォームをレンダリングしています。コンテキストからフォームを渡すので、テンプレートタグの外側で実行されたロジックはそのままです。これは、複数の場所の要素に使用するが、ビューの外でロジックを実行する必要がある汎用テンプレートを持つ場合(またはWagtailの場合、モデルに埋め込まれたページ/スニペットロジック)に特に便利です。

+0

非常に便利で詳細な説明。 – Leo

関連する問題