Django覆盖默认的表单错误信息
我如何覆盖我的项目中的所有应用程序的默认表单错误消息(例如:需要其他语言)(或至less1个应用程序)
谢谢!
最简单的方法是提供一组默认错误到表单域定义。 表单字段可以为其命名参数。 例如:
my_default_errors = { 'required': 'This field is required', 'invalid': 'Enter a valid value' } class MyForm(forms.Form): some_field = forms.CharField(error_messages=my_default_errors) ....
希望这可以帮助。
要全局覆盖“required”错误消息,请在Field上设置default_error_messages类属性:
# form error message override from django.forms import Field from django.utils.translation import ugettext_lazy Field.default_error_messages = { 'required': ugettext_lazy("This field is mandatory."), }
这需要在任何字段被实例化之前发生,例如通过将其包含在settings.py中。
也来到这里从谷歌和我需要的是覆盖默认所需的消息,在我的表单中的所有字段,而不是每次我定义新的表单域传递error_messages参数。 另外,我还没有准备好深入i18n,这个应用程序不需要多语言。 这个博客文章中的评论是最接近我想要的: –
http://davedash.com/2008/11/28/custom-error-messages-for-django-forms/
对于所有需要消息的表单字段,这是我所做的:
class MyForm(forms.Form): def __init__(self, *args, **kwargs): super(MyForm, self).__init__(*args, **kwargs) for k, field in self.fields.items(): if 'required' in field.error_messages: field.error_messages['required'] = 'You have to field this.' class MUserForm(MyForm): user = forms.CharField( label="Username", ) ....
你可能想看看Django出色的i18n支持 。
嗯,似乎没有简单的解决方法的问题。
在浏览Django代码时,我发现默认的错误消息被硬编码到每个表单字段类中,例如:
class CharField(Field): default_error_messages = { 'max_length': _(u'Ensure this value has at most %(max)d characters (it has %(length)d).'), 'min_length': _(u'Ensure this value has at least %(min)d characters (it has %(length)d).'), }
最简单的方法是使用error_messages
参数,所以我必须编写包装函数:
def DZForm(name, args = {}): error_messages = { 'required': u'required', 'invalid': u'invalid', } if 'error_messages' in args.keys(): args['error_messages'] = error_messages.update(args['error_messages']) else: args['error_messages'] = error_messages return getattr(forms, name)(**args)
如果smdb知道更多elegent这样做的方式真的appreaciate看到它:)
谢谢!
来自ProDjango的书:
from django.forms import fields, util class LatitudeField(fields.DecimalField): default_error_messages = { 'out_of_range': u'Value must be within -90 and 90.', } def clean(self, value): value = super(LatitudeField, self).clean(value) if not -90 <= value <= 90: raise util.ValidationError(self.error_messages['out_of_range']) return value
说我有一个BaseForm
与一些error_messages
字典,如:
error_messages = { 'required': 'This field is required', 'caps': 'This field if case sensitive' }
我想覆盖其中一个错误消息:
class MySpecialForm(BaseForm): def __init__(self, *args, **kwargs): super(MySpecialForm, self).__init__(*args, **kwargs) self.error_messages['caps'] = 'Hey, that CAPSLOCK is on!!!'
基本上,只是重写一个字典值。 但我不确定它将如何与国际化合作。
既然这个页面出现在search中,也许值得添加我的$ 0.02,即使这个问题是旧的。 (我仍然习惯Stack Overflow的特殊礼仪。)
下划线(“_”)是ugettext_lazy的别名(如果这是正确的话) 只需使用“硬编码”消息查看文件顶部的导入语句即可。 那么,Django的国际化文档应该有所帮助,例如http://www.djangobook.com/en/2.0/chapter19/