Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何禁用Django模板中FloatField的格式_Python_Django_Templates - Fatal编程技术网

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

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}

我似乎找不到这个问题的确切答案,django的irc需要授权服务。。。 所以我的问题是:当您使用Django时,如何强制对模板中的浮点字段进行某种格式设置

问题很简单,我需要简单的点分隔数字,如: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 %}];
谢谢你抽出时间


另外,在使用管理员生成的表单时,如果浮动显示正确(我的区域设置为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 }}