2016-12-07 2 views
0

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

enter image description here

Antwort

2

Eine Ansicht eine Antwort immer zurückkehren. Sie nicht, wenn das Formular gültig ist; Das ist ein Serverfehler.

Geben Sie HttpResponse() am Ende des is_valid-Blocks zurück.

+0

Das war es ... danke !! –

Verwandte Themen