为什么我的Django表单模板在空格后删除所有数据?

时间:2016-08-03 20:48:36

标签: python html django django-forms django-templates

我正在使用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;在我们的示例中)所以我完全难倒,因为我知道正确的数据正在通过。知道为什么要改变输入值吗?

1 个答案:

答案 0 :(得分:0)

Django没有这样做,你的浏览器是。您需要将值变量放在引号中:

value="{{ field.data|default_if_none:"" }}"

但实际上,你不应该输出这样的字段:使用Django正确地完成它,仅使用{{ field }}