我正在使用Django表单来验证特定的注册页面。表格设置如下:
class MemberForm(forms.Form):
email = forms.EmailField(label='Email', required=True)
password = forms.RegexField(label='Password', widget=forms.PasswordInput, required=True, regex=r'^(?=.*[A-Za-z])(?=.*\d)[\S]{8,}$')
confirm_password = forms.CharField(label='Confirm Password', widget=forms.PasswordInput, required=True)
full_name = forms.CharField(label='Full Name', required=True)
pref_name = forms.CharField(label='Preferred Name', required=False)
phone = forms.RegexField(label='Phone', regex=r'^\+?1?\d{9,15}$', required=True)
address = forms.CharField(label='Address', required=True)
city = forms.CharField(label='City', required=True)
provinces = forms.ChoiceField(label='Provinces', choices=PROVINCE_CHOICES, required=True)
postal_code = forms.RegexField(label='Postal Code', regex=r'^([A-Z][0-9][A-Z]\s[0-9][A-Z][0-9])$')
dob = forms.DateField(label='Birthday', required=True)
occupation = forms.CharField(label='Occupation', required=True)
在这方面一切正常,形式接受应有的一切,并拒绝应有的一切。如果表单无效,我会再次渲染它。这一切都在以下视图中完成:
def create_member(request):
form = forms.MemberForm(request.POST or None)
if request.method == 'POST':
if form.is_valid():
#redirect
provinces = Provinces.objects.all()
return render(request, 'party/adminCreateAccount2.html', {'form': form, 'provinces': provinces, 'today': str(now_date())})
因此,如果表单无效,我只需留在页面上并重复使用当前表单。但是,当表单重新加载时,由于某种原因,所有具有空格的数据将在显示空格后删除所有内容。
例如,如果我使用'测试测试'作为我的全名,然后将其他所有内容留空,当页面重新加载时,我只会看到'测试'。
我的表单使用以下自定义模板显示:
{% for field in form %}
<div class="form-row grp-row grp-cells-1 {{ field.html_name }}">
<div class="field-box l-2c-fluid l-d-4">
<div class="c-1">
<label {% if field.field.required %} class="required" {% endif %} for={{ field.html_name }}>{{ field.label }}</label>
</div>
<div class="c-2">
<input class="vTextField" type="text" name={{ field.html_name }} id={{ field.html_name }} value={{ field.data|default_if_none:"" }}>
</div>
</div>
</div>
{% endfor %}
我尝试在输入旁边输出{{ field.data|default_if_none:"" }}
并显示整个字符串(&#39;测试测试&#39;在我们的示例中)所以我完全难倒,因为我知道正确的数据正在通过。知道为什么要改变输入值吗?
答案 0 :(得分:0)
Django没有这样做,你的浏览器是。您需要将值变量放在引号中:
value="{{ field.data|default_if_none:"" }}"
但实际上,你不应该输出这样的字段:使用Django正确地完成它,仅使用{{ field }}
。