Ответ 1
{{ float_var|stringformat:"f" }}
Я просто не могу найти окончательного ответа на эту проблему, а django irc требует auth для сервисов... Поэтому мой вопрос: как вы можете принудительно форматировать 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 %}];
Спасибо за ваше время.
P.S. У меня нет этой проблемы при использовании созданных администратором форм, где поплавки отображаются правильно (моя локаль - en_US)
{{ float_var|stringformat:"f" }}
Теперь вы можете принудительно распечатать значение без локализации.
{% load l10n %}
{{ value|unlocalize }}
Взято из https://docs.djangoproject.com/en/2.2/topics/i18n/formatting/#std:templatefilter-unlocalize
У меня проблема с отображением значений lat и lng. Мое решение было:
{{ value|safe }}
Вам необходимо создать настраиваемый фильтр шаблонов.
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 }}
Вы можете использовать пользовательский formats.py
(см. Создание файлов пользовательских форматов" в документах Django) и определить THOUSAND_SEPARATOR
и DECIMAL_SEPARATOR
THOUSAND_SEPARATOR = ''
DECIMAL_SEPARATOR = '.'
Это глобальный параметр, поэтому он будет влиять на все поплавки, отображаемые на вашем сайте. И вам нужно включить локализацию (USE_L10N
в ваших settings.py).
Если у вас есть контроль над шаблоном, вы можете просто удалить фильтр floatformat
.
edit. Я не уверен, но, возможно, вы являетесь жертвой этой ошибки Django: # 13617. Попытайтесь включить поддержку выключения локализации в ваших settings.py и посмотреть, исчезли ли ошибочные запятые:
USE_L10N = False
Если это так, взгляните на различные обходные пути, упомянутые в bugreport (самое простое - отключить локализацию, если вам это не понадобится).
У меня такая же проблема, и, как говорит piquadrat, это раздражающая ошибка, связанная с поддержкой локализации. Меняя USE_L10N = True
на False
, разрешите это, оно должно быть исправлено в Django 1.3.
При печати некоторой переменной для 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)