Django の表示形式システムは、カレント ロケール に合った表示形式を使って日付、時刻、数値をテンプレート内で表示することができます。また、フォームでのローカル化された入力も処理します。
この機能が有効のとき、同じコンテンツにアクセスする 2 人のユーザは、違う形で日付、時刻、数値を目にすることになるでしょう。これは、現在のロケールの表示形式に依存します。
デフォルトでは、表示形式システムは無効になっています。有効化するには、設定ファイル内の USE_L10N = True
をセットする必要があります。
注釈
To enable number formatting with thousand separators, it is necessary to
set USE_THOUSAND_SEPARATOR = True
in
your settings file. Alternatively, you could use intcomma
to
format numbers in your template.
表示形式機能が有効のとき、Django がフォーム内で日付、時刻、数値を描画する際に、ローカル化された表示形式を使用することができます。フォームにデータが入力されたとき、ユーザによって使用される表示形式を推測し、異なるロケールに対する異なる表示形式を試みることを意味します。
注釈
Django は、データを描画するために使うものに対して、データを表示するための異なる表示形式を使います。特に、日付を描画するための表示形式は、%a
(省略された曜日名)、%A
(曜日名), %b
(省略された月名)、%B
(月名)、%p
(AM/PM) を使うことができません。
To enable a form field to localize input and output data use its localize
argument:
class CashRegisterForm(forms.Form):
product = forms.CharField()
revenue = forms.DecimalField(max_digits=4, decimal_places=2, localize=True)
USE_L10N
で表示形式を有効にしたとき、Django はテンプレート内で値が出力されたときはいつでもロケールに対応した表示形式を使います。
しかし、ローカル化された値を使うことが適切ではないこともあります -- 例えば、機械が読み込むためにデザインされた JavaScript や XML を出力している場合、どんなときでも非ローカルの値が必要でしょう。また、全ての場所でローカル化を適用するのではなく、特定のテンプレートだけで使いたいときもあるかもしれません。
ローカル化の仕様について細かいコントロールをするために、Django は l10n
テンプレートライブラリを提供しています。これは、以下のタグやフィルタを含んでいます。
localize
¶ブロック内で、テンプレート変数のローカル化を有効化または無効化します。
このタグでは、USE_L10N
よりも細かい粒度のローカル化のコントロールができます。
テンプレートブロックに対してローカル化を有効化または無効化するためには、以下を使ってください:
{% load l10n %}
{% localize on %}
{{ value }}
{% endlocalize %}
{% localize off %}
{{ value }}
{% endlocalize %}
注釈
USE_L10N
の値は、{% localize %}
ブロック内では尊重されません。
各変数ベースで同じ仕事をするテンプレートフィルタについて、localize
と unlocalize
を参照してください。
localize
¶単数のローカル化を強制します。
例:
{% load l10n %}
{{ value|localize }}
単数のローカル化を無効化するには、unlocalize
を使ってください。テンプレートの大きな範囲を通じてローカル化をコントロールするには、localize
テンプレートタグを使ってください。
Django provides format definitions for many locales, but sometimes you might want to create your own, because a format file doesn't exist for your locale, or because you want to overwrite some of the values.
To use custom formats, specify the path where you'll place format files
first. To do that, set your FORMAT_MODULE_PATH
setting to the
package where format files will exist, for instance:
FORMAT_MODULE_PATH = [
'mysite.formats',
'some_app.formats',
]
Files are not placed directly in this directory, but in a directory named as
the locale, and must be named formats.py
. Be careful not to put sensitive
information in these files as values inside can be exposed if you pass the
string to django.utils.formats.get_format()
(used by the date
template filter).
To customize the English formats, a structure like this would be needed:
mysite/
formats/
__init__.py
en/
__init__.py
formats.py
where formats.py
contains custom format definitions. For example:
THOUSAND_SEPARATOR = '\xa0'
to use a non-breaking space (Unicode 00A0
) as a thousand separator,
instead of the default for English, a comma.
2022年6月01日