【问题标题】:Why django uses a comma as decimal separator为什么 django 使用逗号作为小数分隔符
【发布时间】:2013-11-03 04:54:00
【问题描述】:

我正在使用 python 2.6 和 django 1.27

我的模特

class Plan(models.Model):
     price = models.DecimalField(max_digits=5, decimal_places=2,default=0)
     .....

在我的模板中

{{plan.price}}

我的问题是,在我的本地机器上,我将点用作分隔符,例如“2.54”
在我的生产机器上,我得到 '2,54' - 逗号用作分隔符。
我希望它在任何地方都使用点。

在 django 文档中 https://docs.djangoproject.com/en/1.2/ref/settings/#decimal-separator
它说有“DECIMAL_SEPARATOR”选项默认它点。

btw 在两台机器上

In [2]: from django.conf import settings
In [3]: print settings.DECIMAL_SEPARATOR
.

解决方案:

正如@Marcin 指出的那样
在生产机器上将 USE_L10N 设置为 False。

【问题讨论】:

  • 你的服务器有Swiss(German)吗?
  • 我认为我的服务器没有国籍;),我如何检查它?\
  • 在您的 django 设置文件中检查 those settings
  • 我没有任何语言设置。

标签: python django decimal


【解决方案1】:

您可以直接在模板上使用这种替代方式:

{% load l10n %}

{% localize off %}
{{ my_floatvar }}
{% endlocalize %}

或者这个:

{% load l10n %}

{{ my_floatvar|unlocalize }}

更多信息https://docs.djangoproject.com/en/dev/topics/i18n/formatting/#controlling-localization-in-templates

【讨论】:

  • 我知道这有点老了,但我想问一下,如果它对我的案子不起作用,我会做错什么?如果我设置平台 lang=ES(西班牙语),它使用逗号,但如果我设置 lang=EN(英语),它使用点。我尝试了您发布的两种方法,即使关闭或打开本地化也不起作用。
【解决方案2】:

首先,我假设您在settings.py 中打开了 L10N 和 I18N,因为这是默认设置。您看到的差异可能是因为您从具有两种不同语言环境的两台不同计算机访问该网站。 Django 尝试为浏览器报告的语言环境格式化内容。

但是,您可以禁用此行为。见https://docs.djangoproject.com/en/dev/ref/settings/。设置USE_L10N=False,并设置链接页面上指定的各种分隔符选项。

【讨论】:

  • 我从同一台计算机访问了它们,我将尝试将 USE_L10 设置为 false。
  • 是的,它完成了这项工作。虽然我不明白,因为它是同一台计算机和浏览器..
  • @yossi 可能您的开发安装已损坏,无法使用 L10N 信息(例如,未安装语言环境信息)。
猜你喜欢
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 1970-01-01
  • 2017-09-30
相关资源
最近更新 更多