Django 4.2.3:Forms子类自定义西班牙语错误信息不生效求助
问题排查与解决方案
1. 优先排除浏览器原生验证拦截
你看到的默认英文错误提示大概率是浏览器HTML5原生验证的提示,而非Django表单返回的自定义错误。Django默认会给required=True的字段自动添加HTML5的required属性,浏览器会在表单提交前先做验证,直接显示自带提示,不会触发Django后端的错误校验。
解决方法:在模板的<form>标签中添加novalidate属性,禁用浏览器原生验证:
<form method="POST" novalidate> {% csrf_token %} {{ form.as_p }} <button type="submit">提交</button> </form>
2. 验证Django表单错误是否正确生成
可以在视图中临时添加调试代码,确认表单是否真的生成了你定义的西班牙语错误:
def crear(response): form = CreateNewList(response.POST or None) if response.method == "POST": print(form.errors) # 在控制台打印错误信息,检查是否为自定义西语内容 if form.is_valid(): n = form.cleaned_data["nombre"] t = ToDoList(nombre=n) t.save() return render(response,"main/crear.html", {"form": form})
如果控制台打印的是你设置的西语错误,说明后端没问题,问题出在模板渲染;如果打印的还是默认英文,再检查表单字段的error_messages配置。
3. 检查表单字段参数是否冲突
CharField默认required=True,无需重复声明,避免参数重复可能的冲突,修改表单代码如下:
from django import forms class CreateNewList(forms.Form): nombre = forms.CharField( label="Nombre", max_length=200, min_length=3, error_messages = { 'required': "El campo nombre es requerido", 'min_length': "El campo nombre debe ser minimo de 3 caracteres", 'max_length': "El campo nombre debe ser menor a 200 caracteres" } )
4. 确认模板正确渲染错误信息
如果模板用了自定义字段渲染,要确保正确显示字段错误:
<div> {{ form.nombre.label_tag }} {{ form.nombre }} {% if form.nombre.errors %} <div class="error-text"> {{ form.nombre.errors.0 }} </div> {% endif %} </div>
内容的提问来源于stack exchange,提问作者mashkuil
相关产品推荐
相关产品推荐

