Как отключить форматирование для FloatField в шаблоне для Django - PullRequest
30 голосов
/ 24 августа 2010

Я просто не могу найти однозначного ответа на этот вопрос, и irc django нуждается в авторизации для служб ... Итак, мой вопрос: как вы можете принудительно использовать какое-то форматирование для FloatFields в шаблоне, когда вы используете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 %}];

Спасибо за потраченное время.

PS У меня нет этой проблемы при использовании форм, сгенерированных администратором, где плавающие элементы отображаются правильно (моя локаль en_US)

Ответы [ 7 ]

65 голосов
/ 05 апреля 2011
{{ float_var|stringformat:"f" }}
19 голосов
/ 18 февраля 2015

Теперь вы можете принудительно печатать значение без локализации.

{% load l10n %}

{{ value|unlocalize }}

Взято из https://docs.djangoproject.com/en/1.7/topics/i18n/formatting/#std:templatefilter-unlocalize

9 голосов
/ 04 января 2013

У меня проблема с отображением значений lat и lng. Мое решение было:

{{ value|safe }}
5 голосов
/ 09 ноября 2010

Вам необходимо создать пользовательский шаблонный фильтр .

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 }}

2 голосов
/ 16 октября 2010

У меня такая же проблема, и, как говорит piquadrat, это досадная ошибка, связанная с поддержкой локализации. Чтобы решить эту проблему, измените USE_L10N = True на False, предполагается, что это исправлено в Django 1.3.

2 голосов
/ 24 августа 2010

Вы можете использовать пользовательский formats.py (см. « Создание файлов пользовательского формата » в Django документах) и определить THOUSAND_SEPARATOR и DECIMAL_SEPARATOR

THOUSAND_SEPARATOR = ''
DECIMAL_SEPARATOR = '.'

Этоглобальный параметр, поэтому он будет влиять на все поплавки, отображаемые на вашем сайте.И вам придется включить локализацию (USE_L10N в вашем файле settings.py).

Если у вас есть контроль над шаблоном, вы можете просто удалить фильтр floatformat.

edit : Я не уверен, но, возможно, вы стали жертвой этой ошибки Django: # 13617 .Попробуйте отключить поддержку локализации в файле settings.py и посмотреть, исчезают ли ошибочные запятые:

USE_L10N = False

Если это так, взгляните на различные обходные пути, упомянутые вотчет об ошибке (проще всего отключить локализацию, если она вам вообще не нужна).

0 голосов
/ 13 декабря 2013

Когда вы печатаете какую-то переменную для 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...