python - Django form.errors 没有出现在模板中

标签 python django forms jinja2

我已经引用了this stackoverflow 页面并试图在 html 模板上显示我的表单错误。 我做了:

    {% if form.error %}
    {% for field in form %}
        {% for error in field.errors %}
            <div class="alert alert-danger">
                <strong>{{ error|escape }}</strong>
            </div>
        {% endfor %}
    {% endfor %}
    {% for error in form.non_field_errors %}
        <div class="alert alert-danger">
            <strong>{{ error|escape }}</strong>
        </div>
    {% endfor %}
{% endif %}

正如在 stackoverflow 问题中所说,我也尝试简单地做:

{% if form.error %}
This should pop up if there is an error
{% endif %}

无论如何都没有出现: 这是我的 view.py 代码:

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password2')
            user = authenticate(username=username, password=password)
            login(request, user)
            return HttpResponseRedirect('/')
        else:
            print(form.errors)
    form = UserCreationForm()
    return render(request, 'registration/register.html', {'form': form})

我能够将表单错误发送到 Django 控制台,但它拒绝显示在模板上。

打印 form.errors打印到控制台:<li>password2<ul class="errorlist"><li>The two password fields didn&#39;t match.</li></ul></li></ul>

最佳答案

forms.errors 启动了,但最后,您在呈现 View 之前声明了一个新表单 form = UserCreationForm()

检查 form 是否有效后,所有的验证错误都在 form 实例中,记住进程按顺序运行,在最后,您使用 form = UserCreationForm() 销毁了变量 form,因此不再有验证错误

当您的请求方法是 GET 时,您可以将此新表单 form = UserCreationForm() 添加到 else 语句中,以继续拥有一个空的表格。通过添加 else 语句,您可以避免对表单进行新的赋值;在验证过程之后,它将跳转到render(request,....)form实例包含所有验证错误

if request.method == 'POST':
    form = UserCreationForm(request.POST)
    if form.is_valid():
        form.save()
        username = form.cleaned_data.get('username')
        password = form.cleaned_data.get('password2')
        user = authenticate(username=username, password=password)
        login(request, user)
        return HttpResponseRedirect('/')
     else:
         print(form.errors)
<b>else:</b>
    <b>form = UserCreationForm()</b>
return render(request, 'registration/register.html', {'form': form})

Note, the correct call for form errors in templates is form.errors with s not form.error

<s>{% if form.error %}</s>  <b>{% if form.errors %}</b>

关于python - Django form.errors 没有出现在模板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51146120/

相关文章:

javascript - 使用 jQuery 提交数据远程 Rails 表单

python - 无和空字符串的 CSV 阅读器行为

python - 隔离林 : Categorical data

python - 我在 Django 应用程序中的哪里注册 rq-scheduler 作业?

django - ManyRelatedManager 对象不可迭代

php - 从动态生成的多组多个列表框中获取值

python - 如何在 Gtk.ListStore 中存储大于 32 位的整数?

python - Pandas 在由列表组成的元素上删除重复项

django - django 'DateTimeField'没有默认值错误

PHP 事件预订 : get time in increments of 30 minutes is 1 hour out