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

Django表单错误文本无法高亮,如何实现错误内容红色高亮?

问题

检查表单内容时,期望正确内容显示为绿色,错误内容显示为红色,但当前仅能显示错误提示消息,错误文本并未被红色高亮,多次修改无效,如何实现错误文本的高亮效果?

相关代码

view.py

@login_required
@permission_required("service.add_post")
def create_post(req):
    form = PostForm()
    if req.method == "POST":
        form = PostForm(req.POST)
        if form.is_valid():
            form.save()
            title = form.cleaned_data.get("title")
            if title != "POST":
                messages.error(req, f"Something went wrong")
                return redirect('index')
            # id = form.cleaned_data.get("pk")
            messages.success(req, f"Post {title} was created successfully")
            return redirect('index')
    return render(req, "create_post.html", {"form":form})

create_post.html

{% extends "index.html" %}

{% block content %}
<h1>Create Post</h1>
   <form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
 {{ form.as_p }}
 <button class="btn btn-primary">Create New Post</button>

当前状态:已多次修改但无效果,错误提示仅显示消息,字段文本未高亮:
当前错误提示效果


解决方案

Django表单默认不会自动给错误字段添加颜色高亮,需要手动处理表单渲染和样式:

1. 手动渲染表单字段(替换form.as_p)

放弃自动渲染,遍历表单字段,给错误字段标记特殊类:

{% extends "index.html" %}

{% block content %}
<h1>Create Post</h1>
<form action="" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {% for field in form %}
        <div class="form-group {% if field.errors %}has-error{% endif %}">
            {{ field.label_tag }}
            {{ field }}
            {% if field.errors %}
                <div class="text-danger">
                    {% for error in field.errors %}
                        {{ error }}
                    {% endfor %}
                </div>
            {% endif %}
        </div>
    {% endfor %}
    <button class="btn btn-primary">Create New Post</button>
</form>
{% endblock %}

2. 添加CSS样式

在模板头部或全局CSS文件中添加样式,实现高亮:

/* 错误字段及文本高亮 */
.has-error input, .has-error textarea {
    border-color: #dc3545;
    color: #dc3545;
}
.has-error .text-danger {
    color: #dc3545;
}

/* 正确内容高亮(可选) */
.form-control.is-valid {
    border-color: #28a745;
    color: #28a745;
}

3. 处理messages提示的高亮

你代码中title != "POST"的错误是通过messages展示的,要高亮这类提示,需在模板中渲染messages时添加样式:

<!-- 在base模板或当前模板的合适位置添加 -->
{% if messages %}
    {% for message in messages %}
        <div class="alert alert-{{ message.tags }}">
            {{ message }}
        </div>
    {% endfor %}
{% endif %}

如果用Bootstrap,alert-danger会自动将错误提示设为红色,alert-success设为绿色。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:35:19