Grok中的Jinja2模板集成
项目描述
简介
megrok.jinja使得在Grok中使用Jinja2模板成为可能。
有关Grok和Jinja2的更多信息,请访问
需求
Grok v1.0a或更高版本。与Grok v1.0a2进行了测试。
Jinja v2.1.1或更高版本。与Jinja v2.1.1进行了测试。
PyYAML v3.08或更高版本。与PyYAML v3.08进行了测试。
simplejson v1.7.1或更高版本。与simplejson v1.7.1进行了测试。
安装
要在Grok中使用Jinja2模板,必须首先将megrok.jinja作为egg安装,并包含其ZCML。使用grokproject后,修改setup.py如下
install_requires=[''setuptools', 'grok', 'megrok.jinja', # Add extra requirements here ],
然后,在configure.zcml中包含megrok.jinja。它应该看起来像这样
<configure xmlns="http://namespaces.zope.org/zope" xmlns:grok="http://namespaces.zope.org/grok"> <include package="grok" /> <include package="megrok.jinja"/> <grok:grok package="." /> </configure>
重新运行buildout(bin/buildout),得到如下结果
获取分布‘megrok.jinja’。获取megrok.jinja 0.1
就这样。现在您可以将Jinja2模板(具有.jinja扩展名)放置在项目中使用的任何模板目录中。
Jinja2环境
megrok.jinja使用jinja2.ext.i18n扩展创建环境,并覆盖全局变量_和gettext,以便使用自定义函数解决翻译。它还将全局变量provider设置为函数来解决对内容提供者(视图管理器)的调用。
有关Jinja2环境和全局变量的更多信息,请访问
- 添加扩展后,您可以使用
zope.i18n消息工厂
内容提供者,如视图组件
要翻译模板,只需注册您的翻译域,然后您可以编写
{% set i18n_domain='test_domain' %} {{ _('some-msgid')}}
还可以使用{%trans%}标签
{% set i18n_domain='test_domain' %} {% trans %} Whatever you may want to translate. {% endtrans %}
需要注意的是,messages在Python类中创建时,不会像在Zope页面模板中那样被翻译。
如果您编写
view.py
from zope import i18nmessageid _ = i18nmessageid.MessageFactory('some.domain') class Something(grok.View): def update(self): self.msg = _('Some msg id')
view.jinja
{{ view.msg }}
您将始终得到‘Some msg id’。您可以这样做的是
view.py
class Something(grok.View): def update(self): self.msg = 'Some msg id'
view.jinja
{% set i18n_domain='some.domain' %} {{ _(view.msg) }}
请注意,megrok.jinja使用zope.i18n.interfaces.ITranslationDomains中的translate函数,因此使用
{{ _('msg_id') }}
您可以将translate接受的所有参数传递
{{ _('msg_id', domain='another_domain', target_language='es') }}
如果您想调用名为‘manager’的内容提供者,只需编写
{{ provider('manager') }}
关于.json扩展和PyYAML
有关PyYAML的更多信息,请访问:- http://pyyaml.org/wiki/PyYAML
megrok.jinja允许您使用.json扩展编写模板,并在其中,您可以混合使用Jinja2语法和PyYAML。
首先,megrok.jinja将尝试使用Jinja2解析模板,然后将结果传递给PyYAML加载器。如果PyYAML能够加载传递的字符串,则使用simplejson.dumps返回结果
如果您在具有.json扩展的模板中编写此内容
dicts : - key1 : some_text - key2 : {{ 'Some Jinja2 expression' }} {% set l = ['3','4'] %} {% for v in l %} - {{ 'key-' + v }} : whatever {{ v }} {% endfor %}
您将得到以下JSON
{"dicts": [{"key1": "some_text"}, {"key2": "Some Jinja2 expression"}, {"key-3": "whatever 3"}, {"key-4": "whatever 4"}]}
更改日志
0.1 (2009-05-03)
首次公开发布。
项目详情
megrok.jinja-0.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 668a44a95e4fb64ea3265054b2f518b1de6f76234f4277532efcd0feb20a2101 |
|
MD5 | ebacb92c8a301b40976ad87dc9feff9e |
|
BLAKE2b-256 | a64a8ec13d048e2ea7fdf423dd59b43140866d3c4a3b4430e40fb3fb6347e4af |