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

如何在模板中显示Django认证系统的字段错误?

在Django手动表单中显示字段错误的方法

首先你的模板里有个小问题:输入框的value属性用了{{ form.email.key }},这是错误的写法,应该替换为{{ form.email.value|default:'' }},这样才能保留用户提交后输入的内容,避免表单清空。

接下来要显示每个字段的错误,Django表单对象的每个字段都自带errors属性,你可以直接在对应字段的输入框下方渲染这些错误,具体实现如下:

1. 单个字段错误的渲染

在每个<div class="input-group">内、输入框的下方添加错误显示代码,因为一个字段可能触发多个错误(比如格式不符+已被注册),用循环逐个展示更清晰:

{% if form.email.errors %}
    <div class="error-message">
        {% for error in form.email.errors %}
            <p>{{ error }}</p>
        {% endfor %}
    </div>
{% endif %}

2. 非字段错误的处理

有些错误不属于单个字段(比如两次输入的密码不匹配),Django会把这类错误归类到form.non_field_errors中,你可以在表单开头或者结尾添加这部分代码来展示:

{% if form.non_field_errors %}
    <div class="non-field-errors">
        {% for error in form.non_field_errors %}
            <p>{{ error }}</p>
        {% endfor %}
    </div>
{% endif %}

修改后的完整模板

<section class="form-container___auth">
    <div class="form-container">
        <img src="{% static './images/white-logo-all.png'%}" />
        <p class="title">ثبت نام دانش آموز</p>

        <form class="form" method="post" action="">
            {% csrf_token %}
            
            <!-- 非字段错误展示 -->
            {% if form.non_field_errors %}
                <div class="non-field-errors">
                    {% for error in form.non_field_errors %}
                        <p>{{ error }}</p>
                    {% endfor %}
                </div>
            {% endif %}

            <div class="input-group">
                <label for="{{ form.email.id_for_label }}">ایمیل</label>
                <input type="email" name="{{ form.email.name }}" id="{{ form.email.id_for_label }}" placeholder="" value="{{ form.email.value|default:'' }}">
                <!-- 邮箱字段错误 -->
                {% if form.email.errors %}
                    <div class="error-message">
                        {% for error in form.email.errors %}
                            <p>{{ error }}</p>
                        {% endfor %}
                    </div>
                {% endif %}
            </div>

            <div class="input-group">
                <label for="{{ form.username.id_for_label }}">نام کاربری</label>
                <input type="text" name="{{ form.username.name }}" id="{{ form.username.id_for_label }}" placeholder="" value="{{ form.username.value|default:'' }}">
                <!-- 用户名字段错误 -->
                {% if form.username.errors %}
                    <div class="error-message">
                        {% for error in form.username.errors %}
                            <p>{{ error }}</p>
                        {% endfor %}
                    </div>
                {% endif %}
            </div>

            <div class="input-group">
                <label for="{{ form.password1.id_for_label }}">رمز عبور</label>
                <input type="password" name="{{ form.password1.name }}" id="{{ form.password1.id_for_label }}" placeholder="" value="{{ form.password1.value|default:'' }}">
                <!-- 密码1字段错误 -->
                {% if form.password1.errors %}
                    <div class="error-message">
                        {% for error in form.password1.errors %}
                            <p>{{ error }}</p>
                        {% endfor %}
                    </div>
                {% endif %}
            </div>

            <div class="input-group">
                <label for="{{ form.password2.id_for_label }}">تکرار رمز عبور</label>
                <input type="password" name="{{ form.password2.name }}" id="{{ form.password2.id_for_label }}" placeholder="" value="{{ form.password2.value|default:'' }}">
                <!-- 密码2字段错误 -->
                {% if form.password2.errors %}
                    <div class="error-message">
                        {% for error in form.password2.errors %}
                            <p>{{ error }}</p>
                        {% endfor %}
                    </div>
                {% endif %}
            </div>

            <button type="submit" class="sign">ثبت نام</button>
        </form>
        
        <div class="social-message">
            <div class="line"></div>
            <p class="message">ورود</p>
            <div class="line"></div>
        </div>
        
        <p class="signup">.اگر حساب کاربری دارید ، وارد سایت شوید
            <a rel="noopener noreferrer" href="{% url 'login' %}" class="">ورود</a>
        </p>
    </div>
</section>

3. 样式优化建议

可以给错误信息添加CSS样式,让它更显眼:

.error-message, .non-field-errors {
    color: #dc3545;
    font-size: 0.875rem;
    margin-top: 0.25rem;
}

这样用户提交表单后,错误信息会精准显示在对应字段下方,非字段错误会展示在表单顶部,完全适配你的自定义模板结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:55:09