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.2testingDjango==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_CODEvariables:

render_to_response()这个

这个函数在render()的引入之前,除了不会使响应中的请求可用外,其他的工作方式都是相似的。 这不是推荐的,将来可能会被弃用。