2016-11-28 8 views
0

私はサイトのフッターエリアにニュースレターのサインアップフォームを追加しました。ビューにバインドできなかったためinclusion_tagを使用する必要がありました。それはうまく機能し、予想通り、私は、私は明らかに自分自身を把握するために十分にスマートではないだということが起こって奇妙なことがあります:)フォーム送信後にDjangoフォームに変数エラーが見つからない

フォームが送信された後、私は確認メールを受け取ったが、二つのことが起こる:

  1. Django Success Messageは、ページを手動で更新するまで表示されません。
  2. 私のフォームが座っている場所には、構文 'Missing Variable'というエラーがあります。私は参照のためのスクリーンショットを含み、私のフォームコードは以下の通りです。フォームフィールドが再び表示され、ページを再度リフレッシュした後にエラーが消えます。

    <form action='' method='POST' role='form' class="form-inline"> 
        {% csrf_token %} 
        <div class="form-group"> 
        {{ form.mailing_list_full_name }} 
        </div> 
        <div class="form-group"> 
        {{ form.mailing_list_phone }} 
        </div> 
        <div class="form-group"> 
        {{ form.mailing_list_email }} 
        </div> 
        <button class="button button-lg button-square button-pasific hover-ripple-out" type='submit'>Subscribe</button> 
    </form> 
    

    footer_newsletter_signup.html

enter image description here

home_tags.py

@register.inclusion_tag('pages/tags/footer_newsletter_signup.html', takes_context=True) 
def footer_newsletter_signup(context): 
    request = context['request'] 
    title = 'Newsletter Signup' 
    form = MailingListForm(request.POST or None) 

    if form.is_valid(): 
     mailing_list_full_name = form.cleaned_data.get('mailing_list_full_name') 
     mailing_list_phone = form.cleaned_data.get('mailing_list_phone') 
     mailing_list_email = form.cleaned_data.get('mailing_list_email') 
     mailing_list_subject = 'Submission from Newsletter Signup' 
     mailing_list_message = 'Yes, please add me to marketing emails.' 
     from_email = settings.DEFAULT_FROM_EMAIL 
     recipient_list = [from_email, '[email protected]'] 
     ctx = { 
      'mailing_list_subject': mailing_list_subject, 
      'mailing_list_full_name': mailing_list_full_name, 
      'mailing_list_email': mailing_list_email, 
      'mailing_list_phone': mailing_list_phone, 
      'mailing_list_message': mailing_list_message 
     } 

     message = get_template('pages/newsletter_signup_email.html').render(Context(ctx)) 
     msg = EmailMessage(mailing_list_subject, message, to=recipient_list, from_email=from_email) 
     msg.content_subtype = 'html' 
     msg.send() 

     messages.success(request, "Thank you, you've been added to our list.") 
     return HttpResponse('/') 

    context = { 
     'form': form, 
     'title': title, 
    } 
    return context 

その後、私は同じように私のテンプレートにタグを追加します。

{% footer_newsletter_signup %} 
+0

なぜあなたは処理しているが動作しない私ですか? –

+0

@SardorbekImomalievあなたが何を求めているのかはっきりしていませんが、元の質問に自分のフォームを追加しました。 –

+0

'form = MailingListForm(request.POSTまたはNone)if form.is_valid():...'このコードは、タグではなく、表示されている必要があります。 –

答えて

1

[OK]を、この

に答えるので、ここで私は混乱しています場所です。私には十数の意見があり、このフォームはフッターの一番上にあるCall-to-Actionフォームです。どこでもコードを繰り返さずに、このフォームをすべてのビューにバインドするにはどうすればよいですか?ご協力ありがとうございました。

このフォームを処理するには別のビューを作成し、このビューを指し示すformタグのactionパラメータを指定する必要があります。ここで

は、一般的な考え方は、コードはタグの中から

#template 
<form action='{% url "send-mail" %}' method='POST' role='form' class="form-inline"> 
    ... 
#views 
def send_mail(request): 
    form = MailingListForm(request.POST or None) 
    if request.method == 'POST': 
     if form.is_valid(): 
      mailing_list_full_name = form.cleaned_data.get('mailing_list_full_name') 
      mailing_list_phone = form.cleaned_data.get('mailing_list_phone') 
      mailing_list_email = form.cleaned_data.get('mailing_list_email') 
      mailing_list_subject = 'Submission from Newsletter Signup' 
      mailing_list_message = 'Yes, please add me to marketing emails.' 
      from_email = settings.DEFAULT_FROM_EMAIL 
      recipient_list = [from_email, '[email protected]'] 
      ctx = { 
       'mailing_list_subject': mailing_list_subject, 
       'mailing_list_full_name': mailing_list_full_name, 
       'mailing_list_email': mailing_list_email, 
       'mailing_list_phone': mailing_list_phone, 
       'mailing_list_message': mailing_list_message 
      } 

      message = get_template('pages/newsletter_signup_email.html').render(Context(ctx)) 
      msg = EmailMessage(mailing_list_subject, message, to=recipient_list, from_email=from_email) 
      msg.content_subtype = 'html' 
      msg.send() 

      messages.success(request, "Thank you, you've been added to our list.") 
      return HttpResponse('/') 

#tags 
@register.inclusion_tag('pages/tags/footer_newsletter_signup.html', takes_context=True) 
def footer_newsletter_signup(context): 
    title = 'Newsletter Signup' 
    form = MailingListForm() 
    context = { 
     'form': form, 
     'title': title, 
    } 
    return context 

#url 
url('r^send-mail/$', send_mail, name='send-email') 
関連する問題