Python 如何禁用Django模板中FloatField的格式
我似乎找不到这个问题的确切答案,django的irc需要授权服务。。。 所以我的问题是:当您使用Django时,如何强制对模板中的浮点字段进行某种格式设置 问题很简单,我需要简单的点分隔数字,如:42547.34 最后我得到了逗号分隔的值 以下是出现问题的模板示例:Python 如何禁用Django模板中FloatField的格式,python,django,templates,Python,Django,Templates,我似乎找不到这个问题的确切答案,django的irc需要授权服务。。。 所以我的问题是:当您使用Django时,如何强制对模板中的浮点字段进行某种格式设置 问题很简单,我需要简单的点分隔数字,如:42547.34 最后我得到了逗号分隔的值 以下是出现问题的模板示例: {% for point in zone.points.all %} {% if forloop.last %} new google.maps.LatLng({{point.latitude|floatformat}
{% 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 %}];
谢谢你抽出时间
另外,在使用管理员生成的表单时,如果浮动显示正确(我的区域设置为en_US),我没有这个问题。您可以使用自定义的
格式.py
(请参阅Django文档中的“”),并定义千位分隔符和十进制分隔符
THOUSAND_SEPARATOR = ''
DECIMAL_SEPARATOR = '.'
这是一个全局设置,因此它将影响站点上显示的所有浮动。您必须启用本地化(在settings.py中使用_L10N
)
如果您可以控制模板,只需删除floatformat
过滤器即可
编辑:我不确定,但也许你是这个Django bug的受害者:。尝试在settings.py中关闭本地化支持,查看错误的逗号是否消失:
USE_L10N = False
如果是这种情况,请查看bugreport中提到的各种解决方法(最简单的方法是在不需要本地化的情况下关闭本地化)。我也遇到了同样的问题,正如Piquard所说,这是一个与本地化支持相关的恼人错误。将USE\u L10N=True
更改为False
解决此问题,建议在Django 1.3中进行修复。您需要创建一个
用法:
{{float_var | floatdot}}
或{{float_var | floatdot:2}
我在呈现lat和lng值时遇到问题。
{{ float_var|stringformat:"f" }}
我的解决办法是:
{{ value|safe }}
当为javascrip打印一些变量时,最好将其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)
现在可以强制打印值而不进行本地化
{% load l10n %}
{{ value|unlocalize }}
摘自请发布显示此问题的最小代码位。另外,您的区域设置是什么?这是一个使用“,”作为小数点的语言环境吗?这段代码的问题是,它正在编写javascript代码,逗号真的把一切都搞乱了…谢谢你的回答,但是简单地删除过滤器“floatformat”是行不通的。。。我应该添加另一个过滤器吗?我有同样的问题,这是生成Javascript兼容浮动的最简单解决方案。对于Django>1.3,还有新的“本地化”/“取消本地化”过滤器:stringformat:“f”
减少到6位小数(例如,4.3550434558变为4.355043)@justinhui的答案是否定的(即使用unlocize
)。我认为下面给出的答案比这个更好、更清晰。这只有在您想要自定义输出时才有用。喜欢只输出两位小数,您可以编写|stringformat:“.2f”
,但更简单的方法是只编写| safe
,或者确保它不会将输出本地化{%load l10n%}
,然后编写| uncalize
,谢谢您的回答!在我看来,这显然是实现必要功能的最直接方式,因为它禁用了l10n。。因此,与通过l10n解析字符串然后将其转换回不同,您可以获得无模糊的编程数字格式。也很容易理解模板过滤器的作用。最后但并非最不重要的一点是,我们没有禁用html转义,这应该被视为一个正常的默认值。这是一种比所选答案更清晰的方法。无效筛选器:“jsonify”当然是:-)但在我发表此评论时,您的答案未包含任何对jsonify
的引用。默认情况下,它在Django框架中不存在。它需要安装一个外部软件包()或编写一个自定义的jsonify
过滤器,您现在已将其包含在更新的答案中。好的,只需添加该标记。如果您不想加载任何额外的过滤器,这是最好的选择。
{% load l10n %}
{{ value|unlocalize }}