Django:如何获取模板中的语言代码?
在Django模板中是否有一些全局variables用于gettin'语言代码,或者至less是通过视图传递的吗? 例如: {{ LANG }}
应该产生“en”的例子..当人们使用request.LANGUAGE_CODE
时,我真的不舒服。
详细的解释将不胜感激=)
如果它不存在,则需要编写一个模板上下文处理器 。 以下是你如何做到这一点。
放在这个地方:
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', )
(我build议添加到全局设置,因为这意味着当新的上下文处理器添加到默认设置时,不会意外地中断事件。)
但是,它确实存在,如内置的模板上下文处理器django.core.context_processors.i18n
。 您可以以LANGUAGE_CODE
身份访问它。
纯粹为了感兴趣,下面是该函数的定义:
def i18n(request): from django.utils import translation context_extras = {} context_extras['LANGUAGES'] = settings.LANGUAGES context_extras['LANGUAGE_CODE'] = translation.get_language() context_extras['LANGUAGE_BIDI'] = translation.get_language_bidi() return context_extras
确保你使用了一个RequestContext
来进行你的模板渲染,而不是一个普通的Context
,否则它将无法工作。
这是一个老话题。 但有些人可能会觉得有用。
{% load i18n %} ... {% get_current_language as LANGUAGE_CODE %}
Django的参考和例子 。
用Django==1.11.2
testingDjango==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
variables:
render_to_response()这个
这个函数在render()的引入之前,除了不会使响应中的请求可用外,其他的工作方式都是相似的。 这不是推荐的,将来可能会被弃用。