2016-07-07 13 views
0

Auf der einen Seite habe ich ein paar Inhalte und verschiedene Formen haben, so sieht meine Ansicht wie folgt aus:Django Fehler Forms mit Aktionsparameter

def mainpageview(request): 
    args = {} 
    callbackform = CallBackForm 
    mailform = Mail 
    args.update(csrf(request)) 
    args['mainpage'] = Main.objects.get(pk=1) 
    args['callbackform'] = callbackform 
    args['mailform'] = mailform 
    return render (request, 'main/index.html', args) 

def mailform(request): 
    if request.POST: 
    mailform = Mail(request.POST) 
     if mailform.is_valid(): 
     mail = mailform.cleaned_data['email'] 
     message = "Email: " + mail 
     send_mail(...) 
     return HttpResponseRedirect('/callbackresult/') 
     else: 
     mailform = Mail() 
     return HttpResponseRedirect('/', {'mailform':mailform}) 
    else: 
     mailform = Mail(request.POST) 
    return render(request, 'main/index.html', {mailform:mailform}) 

def callback(request): 
    if request.POST: 
    callbackform = CallBackForm(request.POST) 
     if callbackform.is_valid(): 
     name = callbackform.cleaned_data['name'] 
     phone = callbackform.cleaned_data['phone'] 
     message = "Name: " + name + "Phone: " + phone 
     send_mail(...) 
     return HttpResponseRedirect('/callbackresult/') 
     else: 
     return HttpResponseRedirect('/') 
    else: 
    return HttpResponseRedirect('/') 

Dies ist, wie meine Formen aussieht:

class CallBackForm(forms.Form): 
    name = forms.CharField() 
    phone = forms.CharField() 

class Mail(forms.Form): 
    email = forms.EmailField() 

I Aktionsparameter für jede Form hinzufügen, so ist dies Beispiel meiner Vorlage:

<form action="/mail/" method="POST"> 
    {% csrf_token %} 
    {{error.mailform}} 
    {{ mailform }} 
    <input type="submit" class="success button" value="Subscribe"> 
</form> 

Alles funktioniert gut, aber ich kann nicht bekommen wie man Formularansicht schreibt, um Formularfehler anzuzeigen ({{error.mailform}}). Hoffe du kannst mir dabei helfen.

Antwort

1

Sie erstellen ein neues Formular, wenn das Formular nicht gültig ist. Das neue Formular enthält keine Daten für die aktuelle Anfrage, daher werden natürlich keine Fehler auftreten.

Try this:

if request.POST: 
    mailform = Mail(request.POST) 
    if mailform.is_valid(): 
     mail = mailform.cleaned_data['email'] 
     message = "Email: " + mail 
     send_mail(...) 
     return HttpResponseRedirect('/callbackresult/') 
    else: 
     return render(request, 'template.html', {'mailform':mailform}) 
else: 
    mailform = Mail() 
    return render(request, 'template.html', {'mailform':mailform}) 

Es ist auch besser render() zu verwenden, wenn das Formular mit Fehler zurückkehren, da Sie nicht wirklich den Benutzer auf eine andere Seite umgeleitet

0

Ich habe diesen Weg verwendet, um Fehler im Frontend anzuzeigen. Bei einem Fehler müssen Sie das Formularobjekt in eine Vorlage übergeben.

mailroom = Mail(request.POST) 
if mailroom.is_valid(): 
    # save here. 
else: 
    return render(request, 'main/index.html', {'mailroom': mailroom}) 

und in Vorlage {{ mailform.errors }} werden Sie die Fehler geben.

0

django.contrib bieten eine Nachricht für diese Probleme.

from django.contrib import messages 
# then in your form view, take callback form for example 
callbackform = CallBackForm(request.POST) 
    if callbackform.is_valid(): 
     messages.success(request,"success") 
    else: 
     messages.error(request,"error") 
# and in the template 
{% if messages %} 
<ul class="messages"> 
{% for message in messages %} 
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li> 
{% endfor %} 
</ul> 
{% endif %} 

standardmäßig ist django.contrib.messages in Ihrem INSTALLED_APPS ', wenn nicht, müssen Sie es überprüfen.