【问题标题】:Why is my Django form template removing all data after a space?为什么我的 Django 表单模板会删除空格后的所有数据?
【发布时间】:2016-12-09 18:01:07
【问题描述】:

我正在使用 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())})

因此,如果表单无效,我只需留在页面上并重复使用当前表单。但是,当表单重新加载时,由于某种原因,所有具有空格的数据都会在显示时擦除空格之后的所有内容。

例如,如果我使用“Test Test”作为我的全名,然后将其他所有内容留空,当页面重新加载时,我只会看到“Test”。

我的表单使用以下自定义模板显示:

{% 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:"" }},它显示了整个字符串(在我们的示例中为'Test test'),所以我完全被难住了,因为我知道正确的数据正在通过。知道为什么要更改输入值吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    但实际上,您不应该输出这样的字段:使用 Django 来正确执行此操作,只需 {{ field }}

    【讨论】:

    • 这就是我最初尝试过的,但它总是默认显示'
    • 我的意思是你应该使用它而不是整个 input 标签。您可以在表单定义本身中添加额外的 html 类。
    猜你喜欢
    • 1970-01-01
    • 2017-12-08
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 2012-05-23
    • 2020-04-24
    相关资源
    最近更新 更多