Seite 1 von 1

[Django] Fehlerausgabe in einem Formular

Verfasst: Donnerstag 11. Juni 2009, 20:51
von Mawilo
Hallo,

ich habe auf einer Seite ein Kontaktformular. Verschiedene Felder müssen ausgefüllt werden. Einige haben required=False. Angelehnt ist das ganze an die Doku zu Django. Alle POST-Daten werden mit form.cleaned_data[] geprüft.
Wenn ich keine oder fehlerhafte Angaben in die benötigten Felder einsetze, bekomme ich aber eine Fehlermeldung:

Code: Alles auswählen

The view mysite.myapp.views.contact didn't return an HttpResponse object
Werden alle benötigten Felder richtig ausgefüllt, funktioniert die Seite.
Lasse ich mir den else-Zweig der Anweisung if form.is_valid(): ausgeben, erhalte ich auch ein Dictionary mit den Fehlern.

Erwartet habe ich, dass wieder das Kontaktformular angezeigt wird und die Fehler angezeigt werden. Das ganze hat auch schon vor einiger Zeit mal funktioniert :oops:

Hat jemand einen Tip für mich, warum nicht die Fehler in dem Kontaktformular ausgegeben werden sondern die Fehlermeldung kommt?

Grüße
Mawilo

Verfasst: Donnerstag 11. Juni 2009, 21:23
von Dauerbaustelle
Codeschnipsel! Liegt bestimmt irgendwo am Code.

Verfasst: Freitag 12. Juni 2009, 05:54
von Mawilo
Naja, sind mehr als ein paar Zeilen. Hier die View-Funktion:

Code: Alles auswählen

def contact(request):
    if request.method == 'POST': 
        form = ContactForm(request.POST)
        if form.is_valid():
            firma = form.cleaned_data['firma']
            vorname = form.cleaned_data['vorname']
            name = form.cleaned_data['name']
            plz = form.cleaned_data['plz']
            ort = form.cleaned_data['ort']
            strasse = form.cleaned_data['strasse']
            hnr = form.cleaned_data['hnr']
            telefon = form.cleaned_data['telefon']
            fax = form.cleaned_data['fax']
            mail = form.cleaned_data['mail']
            c_art = form.cleaned_data['c_art'] 
            number = form.cleaned_data['number']
            s_ort = form.cleaned_data['s_ort']
            s_plz = form.cleaned_data['s_plz']
            mietstart = form.cleaned_data['mietstart']
            mietende = form.cleaned_data['mietende']
            mitteilung = form.cleaned_data['mitteilung']
            
            return HttpResponseRedirect('/danke/')
##        else:
##            f = open('/tmp/aa_test.txt', 'w')
##            for e in form.errors:
##                f.write(str(e))
##                f.write(' - ')
##                f.write(str(form.errors[e]))
##                f.write('\n')
##            f.close()
    else:
        form = ContactForm()
        return render_to_response('contact.html', {'form': form,})
Wenn ich den else-Zweig aktiviere, bekomme ich folgendes:

Code: Alles auswählen

s_plz - <ul class="errorlist"><li>Dieses Feld ist zwingend erforderlich.</li></ul>
name - <ul class="errorlist"><li>Dieses Feld ist zwingend erforderlich.</li></ul>
ort - <ul class="errorlist"><li>Dieses Feld ist zwingend erforderlich.</li></ul>
plz - <ul class="errorlist"><li>Dieses Feld ist zwingend erforderlich.</li></ul>
telefon - <ul class="errorlist"><li>Dieses Feld ist zwingend erforderlich.</li></ul>
vorname - <ul class="errorlist"><li>Dieses Feld ist zwingend erforderlich.</li></ul>
mietende - <ul class="errorlist"><li>Dieses Feld ist zwingend erforderlich.</li></ul>
mail - <ul class="errorlist"><li>Dieses Feld ist zwingend erforderlich.</li></ul>
strasse - <ul class="errorlist"><li>Dieses Feld ist zwingend erforderlich.</li></ul>
mietstart - <ul class="errorlist"><li>Dieses Feld ist zwingend erforderlich.</li></ul>
s_ort - <ul class="errorlist"><li>Dieses Feld ist zwingend erforderlich.</li></ul>
hnr - <ul class="errorlist"><li>Dieses Feld ist zwingend erforderlich.</li></ul>
Kann der Fehler auch im Template liegen?

Verfasst: Freitag 12. Juni 2009, 07:16
von jens
Der letzte return in Zeile 34 ist falsch eingerückt ;)

Verfasst: Freitag 12. Juni 2009, 07:26
von Mawilo
Dafür liebe ich dieses Forum! :D

Genau das war es. Wenn man den eigenen Code zu lange anschaut, sieht man keine Fehler mehr. (wie früher in der Schule bei einem Diktat :wink: )

Danke