Django + Jinja2 + i18n:jinja2.exceptions.UndefinedError:'gettext'未定义

时间:2017-09-29 16:22:55

标签: django jinja2 django-i18n

我正在努力让事情发挥作用,但仍然没有成功。我使用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

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

2 个答案:

答案 0 :(得分:1)

经过多次尝试,这是我的解决方案。 ' 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

答案 1 :(得分:0)

适用于:

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