我似乎无法找到这个问题的明确答案,而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)
答案 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_SEPARATOR
和DECIMAL_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)