Django:如何在模板中获取语言代码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django:如何在模板中获取语言代码?相关的知识,希望对你有一定的参考价值。

是否有一些全局变量用于django模板中的gettin'语言代码或至少通过视图传递它?像:{{ LANG }}应该产生“en”例如..当人们使用request.LANGUAGE_CODE时我真的不舒服。

详细解释将被赞赏=)

答案

如果它还不存在,你需要写一个template context processor。这是你如何做到这一点。

把它放在某个地方:

def lang_context_processor(request):
    return {'LANG': request.LANGUAGE_CODE}

然后,添加对它的引用TEMPLATE_CONTEXT_PROCESSORS设置。像这样的东西:

from django.conf import global_settings

TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
    'myproject.myapp.templatecontext.lang_context_processor',
)

(我建议添加到全局设置,因为这意味着当新的上下文处理器添加到默认值时,您不会意外地破坏。)

但是,它确实存在,作为内置模板上下文处理器django.template.context_processors.i18n。你可以像LANGUAGE_CODE一样访问它。

纯粹为了兴趣,这里是该功能的定义:

def i18n(request):
    from django.utils import translation
    return {
        'LANGUAGES': settings.LANGUAGES,
        'LANGUAGE_CODE': translation.get_language(),
        'LANGUAGE_BIDI': translation.get_language_bidi(),
    }

确保你使用RequestContext进行模板渲染,而不是简单的Context,否则它将无效。

另一答案

这是一个古老的话题。但是有些人可能觉得它很有用。

{% load i18n %}
...
{% get_current_language as LANGUAGE_CODE %}

Django reference and example

另一答案

Django==1.11.2测试。

启用I18N并使用i18n模板上下文处理器。

# setings.py

USE_I18N = True
# ...
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # ...
                'django.template.context_processors.i18n',
                # ...
            ],
        },
    },
]

然后它在模板中很简单。

# template.html

{% load i18n %}
{{ LANGUAGE_CODE }}

但是在视图函数中使用render()而不是render_to_response(),因此可以在模板中访问LANGUAGE_CODE变量:

render_to_response()这个

此函数在引入render()之前,其工作方式类似,但它不会使响应中的请求可用。不建议这样做,将来可能会被弃用。

以上是关于Django:如何在模板中获取语言代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过变量/方法将Django模板代码注入模板?

如何在另一个标签中使用 Django 模板标签?

如何在扩展另一个文件的 django 模板中使用带有动态内容的 html 块片段?

使用 Django 模板作为片段

如何在Django视图中使用for循环返回每次迭代[关闭]

如何在 Django Summernote 中显示编程片段的代码块?