【问题标题】:Django+Jinja2+i18n: jinja2.exceptions.UndefinedError: 'gettext' is undefinedDjango+Jinja2+i18n: jinja2.exceptions.UndefinedError: 'gettext' 未定义
【发布时间】:2018-03-11 14:41:34
【问题描述】:

我已经尝试了好几个小时来让事情顺利进行,但仍然没有成功。我将 Jinja2 与 Django (https://docs.djangoproject.com/en/1.11/topics/templates/#django.template.backends.jinja2.Jinja2) 一起使用,现在我尝试启用翻译。 Jinja2 文档建议 (http://jinja.pocoo.org/docs/2.9/extensions/#i18n-extension) 现有扩展 (jinja2.ext.i18n)。所以我的配置是这样的:

settings.py

TEMPLATES = [
{
    "BACKEND": "django.template.backends.jinja2.Jinja2",
    "DIRS": [os.path.join(BASE_DIR, 'templates')],
    "APP_DIRS": False,
    'OPTIONS' : {
        'environment': 'config.jinja2.environment'
    }
}]

jinja2.py:

def environment(**options):
    env = Environment(**options, extensions=['jinja2.ext.i18n'])
    env.globals.update({
        'static': staticfiles_storage.url,
        'url': reverse,
        'dj': defaultfilters
    })
    return env

在模板内:

{{ gettext('...') }}

结果:

jinja2.exceptions.UndefinedError: 'gettext' is undefined

有谁知道问题是什么以及我想念什么?提前感谢您的帮助!

【问题讨论】:

    标签: django jinja2 django-i18n


    【解决方案1】:

    它适用于:

    def environment(**options):
        options.update({'extensions':['jinja2.ext.i18n']})
        env = Environment(**options)
    

    【讨论】:

      【解决方案2】:

      这是我多次尝试后的解决方案。 'jinja2.ext.i18n' 不会自动安装 gettext,所以你需要先通过 install_gettext_callables 将它添加到环境中:

      from django.utils.translation import gettext, ngettext
      
      def environment(**options):
          env = Environment(**options, extensions=['jinja2.ext.i18n'])
      
          env.install_gettext_callables(gettext=gettext, ngettext=ngettext, newstyle=True)
      
          env.globals.update({
              'static': staticfiles_storage.url,
              'url': reverse,
              'dj': defaultfilters
          })
          return env
      

      【讨论】:

        猜你喜欢
        • 2020-12-24
        • 2019-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-20
        • 2020-03-08
        相关资源
        最近更新 更多