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:
- Die Django-Erfolgsmeldung wird erst angezeigt, nachdem ich die Seite manuell aktualisiert habe.
- 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.
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 %}
Warum verarbeiten Sie von innen einem Tag? –
@SardorbekImomaliev Ich bin mir nicht sicher, was genau Sie fragen, aber ich habe mein Formular zur ursprünglichen Frage hinzugefügt. –
'form = MailingListForm (request.POST oder None) wenn form.is_valid(): ...' Dieser Code sollte nicht im Tag angezeigt werden. –