2016-11-28 3 views
0

Ich habe ein Newsletter-Anmeldeformular in den Fußzeilenbereich meiner Site eingefügt und musste daher ein inclusion_tag verwenden, da ich es nicht an eine Ansicht binden konnte. Es funktioniert gut und wie erwartet, aber ich habe eine seltsame Sache passiert, dass ich genug anscheinend bin nicht klug ich, um herauszufinden :)Fehlender Variablenfehler im Django-Formular nach der Formularübermittlung

Nachdem das Formular abgeschickt wird, ich die E-Mail-Bestätigung erhalten, aber zwei Dinge passieren:

  1. Die Django-Erfolgsmeldung wird erst angezeigt, nachdem ich die Seite manuell aktualisiert habe.
  2. Wo mein Formular sitzt, gibt es Syntax 'fehlende Variable' Fehler. Ich habe einen Screenshot als Referenz beigefügt und mein Formularcode ist unten. Die Formularfelder erscheinen wieder und Fehler verschwinden nach dem erneuten Aktualisieren der Seite.

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.html

<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> 

Dann, wie ich gerade den Tag zu meiner Vorlage hinzufügen:

{% footer_newsletter_signup %} 
+0

Warum verarbeiten Sie von innen einem Tag? –

+0

@SardorbekImomaliev Ich bin mir nicht sicher, was genau Sie fragen, aber ich habe mein Formular zur ursprünglichen Frage hinzugefügt. –

+0

'form = MailingListForm (request.POST oder None) wenn form.is_valid(): ...' Dieser Code sollte nicht im Tag angezeigt werden. –

Antwort

1

diese

Ok Antworten, hier so ist, wo ich bin verwirrt. Ich habe ein Dutzend Ansichten und dieses Formular ist ein Call-to-Action-Formular, das oben in der Fußzeile sitzt. Wie binde ich dieses Formular an jede Ansicht, ohne den Code überall zu wiederholen? Danke für Ihre Hilfe.

Sie benötigen separate Ansicht erstellen, um diese Form zu handhaben und bieten action param in form Tag dieser Ansicht zeigt.

ist hier allgemeine Idee, Code nicht

Arbeit meine
#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') 
Verwandte Themen