Django的格式化系统可以在模板中使用当前地区特定的格式,来展示日期、时间和数字。它还可以处理表单中的本地化输入。
当它被开启时,访问相同内容的两个用户可能会看到以不同方式格式化的日期、时间和数字,这取决于它们的当前地区的格式。
格式化系统默认是禁用的。需要在你的设置文件中设置USE_L10N = True来启用它。
注意
为了方便,django-admin startproject 创建的settings.py 文件中,USE_L10N = True。但是要注意,要开启千位分隔符的数字格式化,你需要在你的设置文件中设置USE_THOUSAND_SEPARATOR = True。或者,你也可以在你的模板中使用intcomma来格式化数字。
格式化开启之后,Django可以在表单中使用本地化格式来解析日期、时间和数字。也就是说,在表单上输入时,它会尝试不同的格式和地区来猜测用户使用的格式。
注意
Django对于展示数据,使用和解析数据不同的格式。尤其是,解析日期的格式不能使用%a(星期名称的缩写),%A (星期名称的全称),%b (月份名称的缩写), %B(月份名称的全称),或者%p(上午/下午)。
只是使用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模板库,包含以下标签和过滤器,来实现对本地化的精细控制。
Django为许多地区提供了格式定义,但是有时你可能想要创建你自己的格式,因为你的的确并没有现成的格式文件,或者你想要覆写其中的一些值。
添加了指定FORMAT_MODULE_PATH为列表的功能。之前只支持单一的字符串值。
指定你首先放置格式文件的位置来使用自定义格式。把你的FORMAT_MODULE_PATH设置设置为格式文件存在的包名来使用它,例如:
FORMAT_MODULE_PATH = [
'mysite.formats',
'some_app.formats',
]
文件并不直接放在这个目录中,而是放在和地区名称相同的目录中,文件也必须名为formats.py。
需要这样一个结构来自定义英文格式:
mysite/
formats/
__init__.py
en/
__init__.py
formats.py
其中formats.py包含自定义的格式定义。例如:
from __future__ import unicode_literals
THOUSAND_SEPARATOR = '\xa0'
使用非间断空格(Unicode 00A0)作为千位分隔符,来代替英语中默认的逗号。
2015年5月13日