Django 的格式化系统可以在模板中使用指定的格式化工具为当前的 locale 来显示日期、时间和数字。
启用后,访问相同内容的两个用户可能看见不同的日期、时间和数字,这取决于他们本地的语言环境。
The formatting system is enabled by default. To disable it, it's
necessary to set USE_L10N = False
in your settings file.
备注
要启用千位分隔符的数字格式,必须在你的配置文件中设置 USE_THOUSAND_SEPARATOR = True
。另外,你可以使用 intcomma
在你的模板中格式化数字。
格式化开启后,当在表单里解析日期、时间和数字时,Django 可以使用本地化格式。这意味着猜测用户在表单上的输入时所使用的格式化时,会对不同语言环境尝试不同的格式化。
备注
Django 使用与解析数据不同的格式来显示数据。最值得注意的是,解析日期的格式化不能使用 %a
(缩写的日期),%A
(完整的日期),%b
(缩写的月份),%B
(完整的月份),或者 %p
(AM/PM)。
使用 localize
参数来使表单字段能本地化输入和输出数据:
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
模板库,它包含以下的 tags 和 filters。
localize
¶在模板里启用和禁用模板变量本地化。
相比 USE_L10N
,这个标签可对本地化进行更精细的控制。
To activate or deactivate localization for a template block, use:
{% load l10n %}
{% localize on %}
{{ value }}
{% endlocalize %}
{% localize off %}
{{ value }}
{% endlocalize %}
备注
在 {% localize %}
块中,USE_L10N
的值会被忽略。
查看 localize
和 unlocalize
来获取在每个变量基础上执行相同任务的模板过滤器。
Django 为许多地区提供了格式定义,但有时你可能想创建自己的格式,因为你的地区不存在一个格式文件,或者你想覆盖一些值。
要使用自定义格式化,你首先要指定格式化文件的路径,需要将 FORMAT_MODULE_PATH
设置为格式化文件所在的包路径,例如:
FORMAT_MODULE_PATH = [
"mysite.formats",
"some_app.formats",
]
文件不能直接放置在这个目录里,而是要放在本地语言环境的目录中,而且必须命名为 formats.py
。要注意不要在这些文件里放置敏感信息,因为如果你把字符串传递给 django.utils.formats.get_format()
(使用 date
模板过滤器),那么内部值会被暴露。
To customize the English formats, a structure like this would be needed:
mysite/
formats/
__init__.py
en/
__init__.py
formats.py
formats.py
包含自定义格式化定义。例如:
THOUSAND_SEPARATOR = "\xa0"
使用不换行空格(硬空格 Unicode 00A0
)作为千位分隔符,而不是英语的默认逗号。
9月 22, 2023