Django+Jinja2+i18n: jinja2.exceptions.UndefinedError: 'gettext' is undefined
Django+Jinja2+i18n: jinja2.exceptions.UndefinedError: 'gettext' is undefined
我已经尝试了好几个小时来让事情正常进行,但仍然没有成功。我将 Jinja2 与 Django (https://docs.djangoproject.com/en/1.11/topics/templates/#django.template.backends.jinja2.Jinja2) and now I try to enable translations. Jinja2 docs suggest (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
有谁知道问题出在哪里以及我错过了什么?提前感谢您的帮助!
这是我经过多次尝试后的解决方案。 '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
适用于:
def environment(**options):
options.update({'extensions':['jinja2.ext.i18n']})
env = Environment(**options)
我已经尝试了好几个小时来让事情正常进行,但仍然没有成功。我将 Jinja2 与 Django (https://docs.djangoproject.com/en/1.11/topics/templates/#django.template.backends.jinja2.Jinja2) and now I try to enable translations. Jinja2 docs suggest (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
有谁知道问题出在哪里以及我错过了什么?提前感谢您的帮助!
这是我经过多次尝试后的解决方案。 '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
适用于:
def environment(**options):
options.update({'extensions':['jinja2.ext.i18n']})
env = Environment(**options)