2016-07-28 7 views
2

Ich bin neu zu Django und ich versuche, Formulardaten zu validieren und wenn ein Fehler auftritt, übertragen Sie diese Daten auf die Vorlage mit den alten Werten in angezeigt werden die Form. Wenn möglich ich die Fehlermeldung für alle Daten im WörterbuchAnzeige Django Formularfehler für jedes Feld in Vorlage und jede korrekte Daten in Vorlage

views.py

from django.shortcuts import render 

from .forms import RegForm 

# Create your views here. 
def login(request): 

    return render(request, 'login.html') 

def registration(request): 
    if request.method == 'POST': 
     form = RegForm(request.POST) 

     if form.is_valid(): 
      print "Form is valid" 
      print form.cleaned_data 

      user_data = { 
       'firstname':form.cleaned_data['firstname'], 
       'lastname':form.cleaned_data['secondname'], 
       'username': form.cleaned_data['username'], 
       'mail':form.cleaned_data['mail'], 
       'password': form.cleaned_data['password']} 
      print user_data 
     else: 
      print "Form is not valid" 
      print form['mail'].errors 
    return render(request, 'register.html') 
    forms.py 



    from django import forms 

    class RegForm(forms.Form): 

     firstname = forms.CharField(max_length=100) 
     secondname = forms.CharField(max_length=100) 
     username = forms.CharField(max_length=100, min_length=8) 
     mail = forms.EmailField() 
     password = forms.CharField(widget = forms.PasswordInput(), min_length=8, max_length=100) 

register.html

 <!DOCTYPE html> 
    <html> 
     <head> 
      <title>registration</title> 
      <style type="text/css"> 
       header{ 
        width: 100%; 
        display: block; 
       } 
       section{ 
        width: 180px; 
        margin: auto; 
        display: block; 
       } 
       nav{ 
        width: 180px; 
        float: right; 
        display: block; 
       } 

      </style> 
    </head> 
    <body> 
     <header> 
      <nav> 
       <a href="{% url 'registration' %}">Registration</a> 
       <a href="{% url 'login' %}">Login</a> 
      </nav> 
     </header> 
     <section> 
     <h1 align="center">Register:</h1> 
      <form method = "post" action = "{% url 'registration' %}"> 
       {% csrf_token %} 
       <label>First Name:</label><br> 
       <input type="text" name="firstname"><br> 
       <label>Second Name:</label><br> 
       <input type="text" name="secondname"><br> 
       <label>Mail Id:</label><br> 
       <input type="text" name="mail"><br> 
       <label>User Name:</label><br> 
       <input type="text" name="username" value=""><br> 
       <label>Password:</label><br> 
       <input type="password" name="password"><br><br> 
       <input type="submit" name="submit" value="submit"> 
      </form> 
     </section> 

    </body> 
</html> 

Antwort

5

Von Ihrem views.py wollen, übergeben Sie das Formular-Objekt an der Vorlage

... 
return render(request, 'register.html', { 'form': form }) 
... 

In der Vorlage können Sie jetzt das Objektverwendenzum Rendern. Zum Beispiel für Ihre First Name Feld dir dabei gedacht:

... 
<label>First Name:</label><br> 
<input type="text" name="firstname"><br> 
... 

du stattdessen tun sollten:

... 
<label for="{{ form.firstname.id_for_label }}">First Name:</label> 
    {{ form.firstname }} 
    {{ form.firstname.errors }} 
... 

{{ form.firstname }} macht Sie Input-Tag HTML, während {{ form.firstname.errors }} Fehler für dieses Feld macht.

Schließlich können Sie auch das Vorlagen-Tag {{ form.non_field_errors }} (normalerweise am Ende oder am oberen Rand des Formulars) verwenden, um andere Fehler zu rendern.

Die Dokumentation ist sehr klar zu diesem Thema. Weitere Informationen finden Sie unter rendering-fields-manually.

Verwandte Themen