2016-07-28 12 views
2

私はdjangoを初めて使用しています。フォームデータを検証しようとしています。エラーが発生した場合、そのデータをテンプレートページに転送し、フォーム。私はあなたのviews.pyからテンプレート内の各フィールドとテンプレート内の各正しいデータの表示djangoフォームエラー

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> 

答えて

5

のためのエラーメッセージを望むことができた場合は、テンプレートにフォームオブジェクトを渡す

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

テンプレートでは、オブジェクトを使用できますレンダリングの目的のために。例えば は、あなたがやっていたあなたのFirst Nameフィールド用:

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

あなたは代わりにこれを行う必要があります。

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

{{ form.firstname }}{{ form.firstname.errors }}は、このフィールドのエラーをレンダリングしながら、あなたが入力タグをhtmlのレンダリングします。

最後に、テンプレートタグ{{ form.non_field_errors }}(通常はフォームの最後または先頭)を使用して、他のエラーを表示することもできます。

このトピックに関する文書は非常に明確です。詳細はrendering-fields-manuallyをご覧ください。

関連する問題