如何在Django的模板中禁用FloatField的格式

时间:2010-08-23 20:08:00

标签: python django templates

我似乎无法找到这个问题的明确答案,而django的irc需要auth服务...... 所以我的问题是:当你使用Django时,如何在模板中强制使用某种格式的FloatFields?

问题很简单,我需要像这样简单的点分隔数字:42547.34 我最终得到逗号分隔值......

以下是出现问题的模板示例:

{% for point in zone.points.all  %}
  {% if forloop.last %}
    new google.maps.LatLng({{point.latitude|floatformat}},{{point.longitude|floatformat}})
  {% else %} 
    new google.maps.LatLng({{point.latitude|floatformat}},{{point.longitude|floatformat}}),
  {% endif %}
{% endfor %}];

感谢您的时间。

P.S。使用管理生成的表单时,我没有这个问题浮动正确显示(我的语言环境是en_US)

7 个答案:

答案 0 :(得分:64)

{{ float_var|stringformat:"f" }}

答案 1 :(得分:19)

您现在可以强制打印值而不进行本地化。

{% load l10n %}

{{ value|unlocalize }}

取自https://docs.djangoproject.com/en/1.7/topics/i18n/formatting/#std:templatefilter-unlocalize

答案 2 :(得分:9)

我在渲染lat和lng值时遇到问题。 我的解决方案是:

{{ value|safe }}

答案 3 :(得分:5)

您需要创建custom template filter

from django.template import Library
from django.utils.numberformat import format

register = Library()

@register.filter
def floatdot(value, decimal_pos=4):
    return format(value, ".", decimal_pos)

floatdot.is_safe = True

用法:

{{ float_var|floatdot }}{{ float_var|floatdot:2 }}

答案 4 :(得分:2)

您可以使用自定义formats.py(请参阅Django文档中的“Creating custom format files”)并定义THOUSAND_SEPARATORDECIMAL_SEPARATOR

THOUSAND_SEPARATOR = ''
DECIMAL_SEPARATOR = '.'

这是一个全局设置,因此它会影响您网站上显示的所有浮动广告。而且您必须启用本地化({。1}}在您的settings.py中。

如果您可以控制模板,则只需删除USE_L10N过滤器。

编辑:我不确定,但也许你是这个Django bug的受害者:#13617。尝试在settings.py中转换 off 本地化支持,看看错误的逗号是否消失:

floatformat

如果是这种情况,请查看bugreport中提到的各种变通方法(最简单的方法是在不需要它的情况下关闭本地化)。

答案 5 :(得分:2)

我遇到了同样的问题,正如piquadrat所说,这是一个与本地化支持相关的恼人的错误。将USE_L10N = True更改为False解决此问题,可以在Django 1.3中进行修复。

答案 6 :(得分:0)

当为javascript打印一些变量时,最好将其jsonify。写一个jsonify模板标签,然后使用

{{value|jsonify}}

模板标签

from django.core.serializers import serialize
from django.db.models.query import QuerySet
import json
from django.template import Library

register = Library()

def jsonify(object):
    if isinstance(object, QuerySet):
        return serialize('json', object)
    return json.dumps(object)

register.filter('jsonify', jsonify)