Django:テンプレートで言語コードを取得するには?

Djangoのテンプレートにgettinの言語コードのためのいくつかのグローバル変数がありますか? 次のようなものです: {{LANG}} は "en"を生成します。 request.LANGUAGE_CODE を使用している人は、本当に快適ではありません。

詳細な説明は理解されるだろう=)

36
{{LANGUAGE_CODE}}を試しましたか? docs.djangoproject.com/ja/dev/ref/templates/api/…
追加された 著者 Gagandeep Singh,

3 答え

これは古い話題です。しかし、いくつかは役に立つと思うかもしれません。

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

Django リファレンスと例

98
追加された

まだ存在していない場合は、テンプレートコンテキストプロセッサを使用します。ここでそれを行う方法は次のとおりです。

これをどこかに置く:

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.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

プレーンな Context ではなく、テンプレートレンダリングに RequestContext を使用しているか、動作しないことを確認してください。

19
追加された
これは良い答えです、よく説明され、詳細です。しかし、私はあなたがそれを実装する方法、djangoがあなたに与えたもの、関数の例のような順序で記述するのではなく、読みやすくすると思います。それは最初にdjango i18nの実際の答えで書かれていました。実際の答えが埋もれているように感じます。
追加された 著者 guival,
(+1)正直なところ、常に RequestContext を使用してください。ちょうど今習慣に入ってください。 Context を使用するのは間違いです。 RequestContext を普遍的に使用したいと思うようになるには、いつでも常に後になるでしょう。
追加された 著者 Luke Sneeringer,

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 }}


But use render(), not render_to_response(), in your view function so the LANGUAGE_CODE variable is accessible in the template:

render_to_response()

     

この関数は、render()とworksの導入に先立ち   同様に、リクエストを   応答。これは推奨されておらず、   未来。

7
追加された