web-dev-qa-db-ja.com

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

Djangoテンプレートまたは少なくともそれをビューに渡す言語のgettin '言語コードのグローバル変数はありますか?{{ LANG }}は、たとえば「en」を生成します。request.LANGUAGE_CODE

詳細な説明をいただければ幸いです=)

38
holms

まだ存在しない場合は、 テンプレートコンテキストプロセッサ を記述する必要があります。その方法を次に示します。

これをどこかに置きます:

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を使用していることを確認してください。使用しないと機能しません。

19
Chris Morgan

これは古いトピックです。しかし、一部の人はそれが便利だと思うかもしれません。

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

Django 参照と例

109
Rafael