回答
最簡單的方法是將一組默認錯誤提供給表單域定義。表單字段可以爲其指定一個參數。例如:
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)
....
希望這會有所幫助。
你可能想看看Django出色的i18n support。
嗯,似乎沒有簡單的解決方法的問題。
威樂通過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知道這樣做的更高貴的方式真的appreaciate看看吧:)
謝謝!
由於此頁面出現在搜索中,可能值得添加我的$ 0.02,即使問題已經過時。 (我還是習慣了Stack Overflow的特殊禮儀。)
下劃線(「_」)是ugettext_lazy的別名(如果這是正確的術語);只需使用「硬編碼」消息查看文件頂部的導入語句即可。然後,Django的國際化文檔應該有所幫助,例如http://www.djangobook.com/en/2.0/chapter19/
也來自這裏谷歌和我需要的是覆蓋默認所需的消息,我的表單中的所有字段,而不是每次我定義新的表單字段時傳遞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",
)
....
說我有一個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!!!'
基本上,只是重寫其中一個字典值。但我不確定它如何與國際化合作。
從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
要全局覆蓋「需要」的錯誤信息,將場上的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中。
這隻猴子修補它,應該避免,因爲那麼你的應用程序更依賴加載順序(在許多其他原因)。 – 2017-02-26 00:40:13
- 1. 的Django如何覆蓋默認形式的錯誤消息
- 2. 覆蓋ModelForm的默認錯誤消息
- 3. Django的:覆蓋默認的用戶模型的錯誤消息
- 4. Parsely.js覆蓋默認的驗證消息
- 5. 笨覆蓋默認的驗證消息
- 6. 覆蓋默認的angularjs錯誤消息 - 「必需」「無效」
- 7. 覆蓋默認的jquery-steps錯誤消息
- 8. 使用JavaScript覆蓋默認的PHP錯誤消息
- 9. 如何覆蓋Grails中的默認錯誤消息?
- 10. Django:如何覆蓋unique_together錯誤消息?
- 11. Grails默認錯誤消息文本字段名稱覆蓋?
- 12. 如何覆蓋OmniFaces默認驗證/轉換錯誤消息?
- 13. Java bean驗證 - 覆蓋默認消息
- 14. Django覆蓋默認的Django表單
- 15. Django覆蓋默認功能
- 16. 如何格式化/覆蓋Django表單錯誤消息?
- 17. Django的覆蓋形式
- 18. Laravel 4:默認格式錯誤消息
- 19. ng消息默認錯誤消息
- 20. 如何覆蓋Django中的默認錯誤
- 21. 覆蓋BindingResult中的錯誤消息
- 22. 覆蓋Elmah記錄的錯誤消息
- 23. 在Grails中,我無法覆蓋默認的錯誤信息
- 24. 爲什麼我無法覆蓋默認的驗證錯誤消息?
- 25. 覆蓋django-allauth的默認模板
- 26. 驗證錯誤Symfony的2.1形式的主題將不會覆蓋默認
- 27. 如何覆蓋django中的password_change錯誤消息?
- 28. 無法覆蓋默認取消目的
- 29. 覆蓋默認CSS樣式
- 30. 覆蓋Xamarin默認樣式
是的。但我想重寫默認設置,具有設置表單的靈活性... 在你的情況下,我將不得不每次都手動合併默認和表單錯誤消息字典 – Brock 2009-10-01 15:07:52
@Brock這不是那麼糟糕。您只需編寫'my_default_errors.update({...})'來放入字段或形成特定的值。 – 2012-01-03 22:03:45