格式本地化

概览

Django的格式化系统可以在模板中使用当前地区特定的格式,来展示日期、时间和数字。也可以处理表单中输入的本地化。

当它被开启时,访问相同内容的两个用户可能会看到以不同方式格式化的日期、时间和数字,这取决于它们的当前地区的格式。

格式化系统默认是禁用的。需要在你的设置文件中设置USE_L10N = True来启用它。

注意

为了方便起见,django-admin startproject创建的默认的settings.py文件包含了 [USE_L10N = True](../../ref/settings.html#std:setting-USE_L10N) 的设置。但是要注意,要开启千位分隔符的数字格式化,你需要在你的设置文件中设置USE_THOUSAND_SEPARATOR = True。或者,你也可以在你的模板中使用intcomma来格式化数字。

注意

USE_I18N 是另一个独立的并且相关的设置,它控制着Django是否应该开启翻译。详见翻译

表单中的本地化识别输入

格式化开启之后,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模板库,包含以下标签和过滤器,来实现对本地化的精细控制。

模板标签

localize

在包含的代码块内开启或关闭模板变量的本地化。

这个标签可以对本地化进行比USE_L10N更加精细的操作。

这样做来为一个模板激活或禁用本地化:

{% load l10n %}{% localize on %}{{ value }}
{% endlocalize %}{% localize off %}{{ value }}
{% endlocalize %}

注意

在 {% localize %}代码块内并不遵循f USE_L10N的值。

对于在每个变量基础上执行相同工作的模板过滤器,参见localizeunlocalize

模板过滤器

localize

强制单一值的本地化。

例如:

{% load l10n %}{{ value|localize }}

使用unlocalize来在单一值上禁用本地化。使用localize 模板标签来在大块的模板区域内控制本地化。

unlocalize

强制单一值不带本地化输出。

例如:

{% load l10n %}{{ value|unlocalize }}

使用localize来强制单一值的本地化。使用localize模板标签来在大块的模板区域内控制本地化。

创建自定义的格式文件

Django为许多地区提供了格式定义,但是有时你可能想要创建你自己的格式,因为你的的确并没有现成的格式文件,或者你想要覆写其中的一些值。

Changed in Django 1.8:

添加了指定FORMAT_MODULE_PATH为列表的功能。之前只支持单一的字符串值。

指定你首先放置格式文件的位置来使用自定义格式。把你的FORMAT_MODULE_PATH设置设置为格式文件存在的包名来使用它,例如:

FORMAT_MODULE_PATH = ['mysite.formats','some_app.formats',
]

文件并不直接放在这个目录中,而是放在和地区名称相同的目录中,文件也必须名为formats.py

需要这样一个结构来自定义英文格式:

mysite/formats/__init__.pyen/__init__.pyformats.py

其中formats.py包含自定义的格式定义。例如:

from __future__ import unicode_literalsTHOUSAND_SEPARATOR = '\xa0'

使用非间断空格(Unicode 00A0)作为千位分隔符,来代替英语中默认的逗号。

提供本地化格式的限制

一些地区对数字使用上下文敏感的格式,Django的本地化系统不能自动处理它。

瑞士(德语)

瑞士的数字格式化取决于被格式化的数字类型。对于货币值,使用逗号作为千位分隔符,以及使用小数点作为十进制分隔符。对于其它数字,逗号用于十进制分隔符,空格用于千位分隔符。Django提供的本地格式使用通用的分隔符,即逗号用于十进制分隔符,空格用于千位分隔符。

译者:Django 文档协作翻译小组,原文:ocalized Web UI formatting and form input。

本文以 CC BY-NC-SA 3.0 协议发布,转载请保留作者署名和文章出处。

Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。

django 1.8 官方文档翻译:9-1-4 格式本地化相关推荐

  1. django 1.8 官方文档翻译: 9-1-1 国际化和本地化

    国际化和本地化 概述 国际化和本地化的目的就是让一个网站应用能做到根据用户语种和指定格式的不同而提供不同的内容. Django 对文本翻译, 日期.时间和数字的格式化,以及时区提供了完善的支持. 实际 ...

  2. django 1.8 官方文档翻译: 2-5-7 自定义查找

    自定义查找 New in Django 1.7. Django为过滤提供了大量的内建的查找(例如,exact和icontains).这篇文档阐述了如何编写自定义查找,以及如何修改现存查找的功能.关于查 ...

  3. django 1.8 官方文档翻译: 4-2-4 人性化

    Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质. 交流群:467338606 网站:http://python.usyiyi.cn/django/index.html ...

  4. django 1.8 官方文档翻译: 2-5-6 多数据库

    多数据库 这篇主题描述Django 对多个数据库的支持.大部分Django 文档假设你只和一个数据库打交道.如果你想与多个数据库打交道,你将需要一些额外的步骤. 定义你的数据库 在Django中使用多 ...

  5. django 1.8 官方文档翻译: 1-1-2 快速安装指南

    快速安装指南 在你开始使用 Django 之前,你需要先安装它.我们有一个 完整安装指南 它涵盖了所有的安装步骤和可能遇到的问题:本指南将会给你一个最简单.简洁的安装指引. 安装 Python 作为一 ...

  6. django 1.8 官方文档翻译: 3-4-2 基于类的内建通用视图

    基于类的内建通用视图 编写Web应用可能是单调的,因为你需要不断的重复某一种模式. Django尝试从model和 template层移除一些单调的情况,但是Web开发者依然会在view(视图)层经历 ...

  7. django 1.8 官方文档翻译:2-5-9 条件表达式

    条件表达式 New in Django 1.8. 条件表达式允许你在过滤器.注解.聚合和更新操作中使用 if ... elif ... else的逻辑.条件表达式为表中的每一行计算一系列的条件,并且返 ...

  8. django 1.8 官方文档翻译:8-5 加密签名

    加密签名 web应用安全的黄金法则是,永远不要相信来自不可信来源的数据.有时通过不可信的媒介来传递数据会非常方便.密码签名后的值可以通过不受信任的途径传递,这样是安全的,因为任何篡改都会检测的到. D ...

  9. django 1.8 官方文档翻译: 3-4-2 内建显示视图

    Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质. 交流群:467338606 网站:http://python.usyiyi.cn/django/index.html ...

最新文章

  1. POJ.3207.Ikki's Story IV-Panda's Trick(2-SAT)
  2. 第二章 系统设置及基本操作
  3. React基础篇(五)css样式的使用
  4. 2018南华大学计算机学院,南华大学2019年排名第214位 较2018年下降32名
  5. 【原创】技术员 Win10 PE 网络版启动工具 V6.2 兼容UEFI双启动
  6. DP1363F与CLRC663的兼容性对比区别
  7. 一体机怎么修复音频服务器,多媒体教学一体机没有声音是怎么办?
  8. 从苏宁电器到卡巴斯基(第二部)第06篇:我在卡巴的日子 VI
  9. python实时监控网站更新_Python监控Github项目更新并自动下载
  10. 使用经典的基本播放命令和 MML 创建 MIDI 文件
  11. OC callback
  12. 德国研究生计算机英语授课大学,德国英语授课硕士申请成功案例
  13. zsore和经验法则(统计学原理)
  14. SONY Xperia SP M35 解锁后重新上锁
  15. 清理蓝藻的机器人_蓝藻打捞机 蓝藻打捞设备 蓝藻清除机 绿藻打捞设备 水华清除机...
  16. 王者荣耀怎么删掉注销的服务器,王者荣耀转区可以取消吗 跨系统角色转移怎么取消...
  17. iomanip I/O流类库操纵符
  18. 相似度计算——欧氏距离、汉明距离、余弦相似度
  19. 有关剑侠情缘网络版开发的一篇文章
  20. 机器人路径规划——关于贝塞尔曲线方程的理解

热门文章

  1. FPGA常用单位换算
  2. mysql结果集键值对_键值对集合DictionaryK,V根据索引提取数据
  3. matlab吧结果存数组,求助:如何将带有符号变量的运算结果储存到数组中
  4. STM32F103_步进电机
  5. visual basic开发实例大全(基础卷_2021中考数学、物理、化学公式大全!建议收藏!...
  6. 静态库-动态库混合编译
  7. 对I2C总线的时钟同步和总线仲裁的深入理解
  8. 计算机编程竞赛怎么入门,acm编程比赛入门题目集..pdf
  9. java 修改txt_Java实现批量修改txt文件名称的方法示例
  10. java复习系列[6] - Java集合