跳转到主要内容

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 (12.2 kB 查看哈希值)

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面