Ich habe dies zu Tode erforscht, aber habe nicht genau gefunden, was ich brauche, um den letzten Teil meines Formulars abgeschlossen zu bekommen.Django Ajax Form funktioniert, aber wirft 500 (Interner Serverfehler)
Ich habe eine einfache 2-Feld-Formular in meiner Fußzeile für Newsletter-Anmeldung. Ich verwende eine inclusion_tag
, da ich das Formular auf jeder Seite einschließen muss.
Das Formular funktioniert; mit ein paar hitches, um argumente willen, es funktioniert, ich drück mich einreichen und die e-mail wird mir geschickt. Das Problem ist, dass ich eine 500(internal server error)
in der Konsole auf der Ajax-URL bekomme. Ich gehe davon aus, dass es nicht wirklich auf die URL umleiten sollte, sondern nur die Form verarbeiten. Unten ist mein Code; Ich hoffe, dass jemand meine Probleme leicht aufzeigen kann. Vielen Dank.
Inclusion Tag
@register.inclusion_tag('includes/cta_form.html', takes_context=True)
def footer_newsletter_signup(context):
title = 'Newsletter Signup'
form = CTASignupForm()
context = {
'form': form,
'title': title,
}
return context
Ajax
$('#sendSignupForm').click(function (e) {
e.preventDefault();
var mForm = $('#signupForm').serialize();
console.log(mForm);
$.ajax({
type: 'POST',
url: '{% url 'pages:cta_signup' %}',
data: mForm,
success: function (data) {
$("input").val('')
},
error: function (data) {
$("input").addClass('error')
}
})
})
cta_form.html
<form action="{% url 'pages:cta_signup' %}" method="POST" id="signupForm">
{% csrf_token %}
{{ form.name }}
{{ form.email }}
<button class="btn btn-black no-margin-bottom btn-small" type="submit" id="sendSignupForm">Submit</button>
</form>
Ansicht
def cta_signup(request):
if request.method == "POST":
form = CTASignupForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
email = form.cleaned_data['email']
subject = 'This is a response from Soledad Footer Signup Form'
from_email = settings.DEFAULT_FROM_EMAIL
recipient_list = [from_email, '[email protected]']
ctx = {
'subject': subject,
'name': name,
'email': email
}
message = get_template('email_forms/cta_signup_email.html').render(Context(ctx))
msg = EmailMessage(subject, message, from_email=from_email, to=recipient_list)
msg.content_subtype = 'html'
msg.send()
messages.success(request, "Thank you, we received your message")
if form.errors:
json_data = json.dumps(form.errors)
return HttpResponseBadRequest(json_data, content_type='application/json')
else:
raise Http404
Screenshot von Console Fehler
Das war es ... danke !! –