gpt4 book ai didi

python - 如何在 View 和模板之外使用 Pyramid i18n?

转载 作者:太空狗 更新时间:2023-10-30 01:03:13 24 4
gpt4 key购买 nike

Pyramid documentation向我们展示了如何在 View 中使用 i18n(和 templates as well)。但是如何在我们无法访问当前 request 的 View 和模板之外使用它(例如,在 formsmodels 中) ?

@Michael 说要将 request 传递给模型和表单。但这是对的吗?我的意思是如果表单字段在 __init__() 方法调用之前定义,与模型相同。他们从 View 中看不到任何参数...

在 Pylons 中,我们可以简单地使用 get_lang()set_lang() 并在父 Controller 中定义首选语言,然后使用 ugettext()ungettext() 在我们想要的任何地方,而不是每次都直接从 request 调用它(在 View 中)。

如何在 Pyramid 中做到这一点?请注意,必须从用户设置( session 、cookie、数据库等)中设置语言。

最佳答案

我的解决方案是在需要时创建表单类,并将本地化器作为参数。例如

表单.py

class FormFactory(object):

def __init__(self, localizer):
self.localizer = localizer
_ = self.localizer
self.required_msg = _(u'This field is required.')
self.invalid_email_msg = _(u'Invalid email address.')
self.password_not_match_msg = _(u'Password must match')

def make_contact_form(self):
_ = self.localizer
class ContactForm(Form):
email = TextField(_(u'Email address'), [
validators.Required(self.required_msg),
validators.Email(self.invalid_email_msg)
])
content = TextAreaField(_(u'Content'), [
validators.Required(self.required_msg)
])
return ContactForm

当你需要使用表单的时候

@view_config(route_name='front_pages.contact_us',
renderer='myweb:templates/front_pages/contact_us.genshi')
def contact_us(request):
"""Display contact us form or send mail

"""
_ = get_localizer(request)

factory = FormFactory(_)
ContactForm = factory.make_contact_form()
form = ContactForm(request.params)
return dict(form=form)

如您所见,我们在 View 中获取定位器,并将其传递给 FormFactory,然后使用该工厂创建一个表单。通过这样做,表单中的所有消息都被替换为当前的语言环境。

同样,您可以对模型执行相同的操作。

关于python - 如何在 View 和模板之外使用 Pyramid i18n?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10373563/

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