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:如何在模板中获取语言代码?的主要内容,如果未能解决你的问题,请参考以下文章