gpt4 book ai didi

python - WTForms - 内置消息翻译

转载 作者:行者123 更新时间:2023-12-01 07:07:26 25 4
gpt4 key购买 nike

我在 Web 应用程序中使用 Python 3.7.4 以及 Flask 1.1.1 和 WTforms 2.2.1。

我正在尝试创建DateField像这样:

user_birth = DateField('Datum narození', format='%d-%m-%y')

如果用户错误地填写日期并提交,则会显示消息:“不是有效的日期值”,我希望以英语以外的语言(例如捷克语)显示该消息。

StringField我这样做是这样的:

username = StringField('Přezdívka', [validators.Length(min=1, max=30, message='Pole musí obsahovat hodnotu od 1 do 30 znaků.')])

但是对于 DateField我无法放置任何验证器。

问题:是否可以将任何验证器插入 DateField以及如何?

最佳答案

这是 the sourceDateField 的定义:

class DateField(DateTimeField):
"""
Same as DateTimeField, except stores a `datetime.date`.
"""

def __init__(self, label=None, validators=None, format="%Y-%m-%d", **kwargs):
super(DateField, self).__init__(label, validators, format, **kwargs)

def process_formdata(self, valuelist):
if valuelist:
date_str = " ".join(valuelist)
try:
self.data = datetime.datetime.strptime(date_str, self.format).date()
except ValueError:
self.data = None
raise ValueError(self.gettext("Not a valid date value"))

您可以看到 ValueError 是从 process_formdata() 方法中引发的,该方法不允许您提供特定的错误消息。但是,请注意,错误消息包含在对 self.gettext() 的调用中 - 这是为了允许消息翻译,并且有可用的 CZ 翻译。

翻译对象从 Form 对象传递到表单字段,因此您可以基于每个实例设置翻译,也可以使用类继承为所有表单设置翻译。

按表单进行翻译:

from wtforms import DateField, Form
from werkzeug.datastructures import MultiDict


class MyForm(Form):
user_birth = DateField('Datum narození', format='%d-%m-%y')


if __name__ == "__main__":
# this fakes an invalid form from webserver
request_form = MultiDict([("user_birth", "invalid date")])
form = MyForm(request_form, meta={'locales': ['cs_CZ']})
print(form.user_birth.process_errors) # ['Neplatná hodnota pro datum.']

使用公共(public)基类进行翻译:

class BaseForm(Form):
class Meta:
locales = ['cs_CZ']


class MyForm(BaseForm):
user_birth = DateField('Datum narození', format='%d-%m-%y')


if __name__ == "__main__":
request_form = MultiDict([("user_birth", "invalid date")])
form = MyForm(request_form)
print(form.user_birth.process_errors) # ['Neplatná hodnota pro datum.']

所有支持的语言环境都可以在 here 中找到,以及支持文档 here .

关于python - WTForms - 内置消息翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58377277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com