如果 form.is_valid() 总是错误的
if form.is_valid() always false
我正在学习 Django 1.11,我正在使用 widget_tweaks 工具创建表单。
我有一个变量 "code",它应该通知模板是否发送了表单。
如果未发送,code = 1 并显示表单
如果显示表格,我只想显示另一个表格(暂不开发)
问题是,代码总是 = 1
为什么?
非常感谢
view.py
#-*- coding: utf-8 -*-
from django.shortcuts import render
from .forms import MinimumRegisterForm
# Create your views here.
def view_about(request):
return render(request, 'about.html', locals())
def view_first(request):
return render(request, 'first.html', locals())
def view_second(request):
form = MinimumRegisterForm()
if request.method == 'POST':
form = MinimumRegisterForm(request.POST)
if form.is_valid():
identifiant = form.cleaned_data['identifiant']
email = form.cleaned_data['email']
password = form.cleaned_data['password']
confirm_password = form.cleaned_data['confirm_password']
code = "2"
else:
code = "1"
return render(request, 'second.html', locals())
return render(request, 'second.html', locals())
模板html
<div class="inner cover">
<h1 class="cover-heading">Parlons un peu de vous ...</h1>
<div class="MinimumRegisterForm">
{% if form.errors %}
Les erreurs suivantes sont survenues:
{{ form.errors }}
{% endif %}
{% if code == "1" %}
<form action="{% url 'second' %}" action="POST">
{% csrf_token %}
<p>{{ form.identifiant|add_class:"form-control"|attr:"placeholder:Quel sera votre identifiant unique ?" }}</p>
<p>{{ form.email|add_class:"form-control"|attr:"placeholder:Indiquez-y votre email !" }}</p>
<p>{{ form.password|add_class:"form-control"|attr:"placeholder:Créer votre mot de passe ici." }}</p>
<p>{{ form.confirm_password|add_class:"form-control"|attr:"placeholder:Retaper votre mot de passe." }}</p>
<input class="btn btn-lg btn-primary" type="submit" value="Continuer">
</form>
{% elif code == "2" %}
<p>Formulaire suivant</p>
{% endif %}
{{ code }}
</div>
</div>
Forms.py
from django import forms
class MinimumRegisterForm(forms.Form):
identifiant = forms.CharField(
max_length=50,
label="Choisissez un identifiant unique",
)
email = forms.EmailField(
label="Votre adresse mail",
)
password = forms.CharField(
widget=forms.PasswordInput,
label="Entrer un mot de passe",
)
confirm_password = forms.CharField(
widget=forms.PasswordInput,
label="Confirmer votre mot de passe",
)
首先,在您的视图 def
正下方添加 form = MinimumRegisterForm()
,其次,您必须检查是否是 POST
请求 if request.method == 'POST'
,并且仅当它是 POST
,以其他方式将数据绑定到表单,第一次呈现表单时,您会收到错误消息,因为表单是空的,但您尝试获取 POST
尚未引入的数据。
from django.shortcuts import render
from .forms import MinimumRegisterForm
def view_second(request):
if request.method == 'POST':
form = MinimumRegisterForm(request.POST)
if form.is_valid():
identifiant = form.cleaned_data['identifiant']
email = form.cleaned_data['email']
password = form.cleaned_data['password']
confirm_password = form.cleaned_data['confirm_password']
code = "2"
form = MinimumRegisterForm()
return render(request, 'second.html', {'code': code, 'form': form})
else:
form = MinimumRegisterForm()
code = "1"
return render(request, 'second.html', {'code': code, 'form': form})
但是,在真正的应用程序中,您不使用 code = "1"
and code = "2"
,而是仅在模板中显示错误(如果有),就像@Daniel Roseman 在他的回复中显示的那样。
使用 Django 表单的要点是它会自己告诉您问题是什么。与其使用只给你 0 或 1 的毫无意义的 "code" 变量,你应该让表单在模板中显示它的错误。重新显示表单让您的用户有机会修正这些错误。
<div class="MinimumRegisterForm">
<p>Formulaire suivant</p>
{% if form.errors %}
Les erreurs suivantes sont survenues:
{{ form.errors }}
{% endif %}
<form action="{% url 'second' %}" action="POST">
{% csrf_token %}
<p>{{ form.identifiant|add_class:"form-control"|attr:"placeholder:Quel sera votre identifiant unique ?" }}</p>
<p>{{ form.email|add_class:"form-control"|attr:"placeholder:Indiquez-y votre email !" }}</p>
<p>{{ form.password|add_class:"form-control"|attr:"placeholder:Créer votre mot de passe ici." }}</p>
<p>{{ form.confirm_password|add_class:"form-control"|attr:"placeholder:Retaper votre mot de passe." }}</p>
<input class="btn btn-lg btn-primary" type="submit" value="Continuer">
</form>
</div>
我正在学习 Django 1.11,我正在使用 widget_tweaks 工具创建表单。
我有一个变量 "code",它应该通知模板是否发送了表单。 如果未发送,code = 1 并显示表单 如果显示表格,我只想显示另一个表格(暂不开发)
问题是,代码总是 = 1
为什么?
非常感谢
view.py
#-*- coding: utf-8 -*-
from django.shortcuts import render
from .forms import MinimumRegisterForm
# Create your views here.
def view_about(request):
return render(request, 'about.html', locals())
def view_first(request):
return render(request, 'first.html', locals())
def view_second(request):
form = MinimumRegisterForm()
if request.method == 'POST':
form = MinimumRegisterForm(request.POST)
if form.is_valid():
identifiant = form.cleaned_data['identifiant']
email = form.cleaned_data['email']
password = form.cleaned_data['password']
confirm_password = form.cleaned_data['confirm_password']
code = "2"
else:
code = "1"
return render(request, 'second.html', locals())
return render(request, 'second.html', locals())
模板html
<div class="inner cover">
<h1 class="cover-heading">Parlons un peu de vous ...</h1>
<div class="MinimumRegisterForm">
{% if form.errors %}
Les erreurs suivantes sont survenues:
{{ form.errors }}
{% endif %}
{% if code == "1" %}
<form action="{% url 'second' %}" action="POST">
{% csrf_token %}
<p>{{ form.identifiant|add_class:"form-control"|attr:"placeholder:Quel sera votre identifiant unique ?" }}</p>
<p>{{ form.email|add_class:"form-control"|attr:"placeholder:Indiquez-y votre email !" }}</p>
<p>{{ form.password|add_class:"form-control"|attr:"placeholder:Créer votre mot de passe ici." }}</p>
<p>{{ form.confirm_password|add_class:"form-control"|attr:"placeholder:Retaper votre mot de passe." }}</p>
<input class="btn btn-lg btn-primary" type="submit" value="Continuer">
</form>
{% elif code == "2" %}
<p>Formulaire suivant</p>
{% endif %}
{{ code }}
</div>
</div>
Forms.py
from django import forms
class MinimumRegisterForm(forms.Form):
identifiant = forms.CharField(
max_length=50,
label="Choisissez un identifiant unique",
)
email = forms.EmailField(
label="Votre adresse mail",
)
password = forms.CharField(
widget=forms.PasswordInput,
label="Entrer un mot de passe",
)
confirm_password = forms.CharField(
widget=forms.PasswordInput,
label="Confirmer votre mot de passe",
)
首先,在您的视图 def
正下方添加 form = MinimumRegisterForm()
,其次,您必须检查是否是 POST
请求 if request.method == 'POST'
,并且仅当它是 POST
,以其他方式将数据绑定到表单,第一次呈现表单时,您会收到错误消息,因为表单是空的,但您尝试获取 POST
尚未引入的数据。
from django.shortcuts import render
from .forms import MinimumRegisterForm
def view_second(request):
if request.method == 'POST':
form = MinimumRegisterForm(request.POST)
if form.is_valid():
identifiant = form.cleaned_data['identifiant']
email = form.cleaned_data['email']
password = form.cleaned_data['password']
confirm_password = form.cleaned_data['confirm_password']
code = "2"
form = MinimumRegisterForm()
return render(request, 'second.html', {'code': code, 'form': form})
else:
form = MinimumRegisterForm()
code = "1"
return render(request, 'second.html', {'code': code, 'form': form})
但是,在真正的应用程序中,您不使用 code = "1"
and code = "2"
,而是仅在模板中显示错误(如果有),就像@Daniel Roseman 在他的回复中显示的那样。
使用 Django 表单的要点是它会自己告诉您问题是什么。与其使用只给你 0 或 1 的毫无意义的 "code" 变量,你应该让表单在模板中显示它的错误。重新显示表单让您的用户有机会修正这些错误。
<div class="MinimumRegisterForm">
<p>Formulaire suivant</p>
{% if form.errors %}
Les erreurs suivantes sont survenues:
{{ form.errors }}
{% endif %}
<form action="{% url 'second' %}" action="POST">
{% csrf_token %}
<p>{{ form.identifiant|add_class:"form-control"|attr:"placeholder:Quel sera votre identifiant unique ?" }}</p>
<p>{{ form.email|add_class:"form-control"|attr:"placeholder:Indiquez-y votre email !" }}</p>
<p>{{ form.password|add_class:"form-control"|attr:"placeholder:Créer votre mot de passe ici." }}</p>
<p>{{ form.confirm_password|add_class:"form-control"|attr:"placeholder:Retaper votre mot de passe." }}</p>
<input class="btn btn-lg btn-primary" type="submit" value="Continuer">
</form>
</div>