You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django表单自定义布局时如何正确显示错误提示信息

Django自定义登录表单错误提示解决方案

问题根因

  • 你当前使用的是普通Django Form而非FormSet表单集,登录时用户名密码不匹配这类全局校验错误存储在form.non_field_errors属性中,你调用的formset.non_form_errors是表单集专属的错误属性,因此无法触发错误显示。
  • 单字段校验错误(如空用户名、密码为空)已经由as_crispy_field标签自动处理,会直接显示在对应输入框下方,无需额外编码。

修正后完整代码

{% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section">
    <form method="POST">
        {% csrf_token %}
        <fieldset class="form-group">
            <legend class="border-bottom mb-4 ">Log In</legend>
            <!-- 替换为普通表单的全局错误渲染逻辑 -->
            {% if form.non_field_errors %}
            <div class="alert alert-block alert-danger">
                <ul class="m-0">
                    {{ form.non_field_errors|unordered_list }}
                </ul>
            </div>
            {% endif %}
            <div class="row">
                <div class="col-md-4 col-sm-12 register-field">
                    {{ form.username|as_crispy_field }}
                </div>
                <div class="col-sm-12 register-field">
                    {{ form.password|as_crispy_field }}
                </div>
            </div>
        </fieldset>
        <div class="form-group">
            <button class="btn btn-outline-info" type="submit">Login</button>
        </div>
    </form>
    <div class="border-top pt-3">
        <small class="text-muted">
            Need An Account? <a class="ml-2" href="{% url 'register' %}">Sign Up Now</a>
        </small>
    </div>
</div>
{% endblock content %}

实现效果

修改后完全保留你自定义的字段排布样式,同时和原生crispy渲染逻辑完全对齐:字段级错误显示在对应输入框下方,全局校验错误显示在表单顶部的红色警告块中,符合预期显示需求。

内容的提问来源于stack exchange,提问作者Federico Gentile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:15:03