2010-08-23 2 views
26

Я просто не могу найти окончательного ответа на эту проблему, а django's irc требует auth для сервисов ... Итак, мой вопрос: как вы можете заставить какой-то тип форматирования для FloatFields в шаблоне при использовании Django?Как отключить форматирование для FloatField в шаблоне для 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. я не имею эту проблему при использовании администратора форм, созданных где поплавки появляются правильно (My локаль en_US)

+1

Пожалуйста, пост наименьший кусок кода, который показывает эту проблему. Кроме того, какова ваша локальная настройка? Это язык, который использует «,» для десятичной точки? –

+0

done :) спасибо –

+0

проблема с этим кодом в том, что он пишет код javascript, а запятые действительно встряхивают все ... –

ответ

58
{{ float_var|stringformat:"f" }} 
+4

У меня была такая же проблема, и эти швы были самым простым решением для создания совместимых с Javascript поплавков. Для Django> 1.3 есть также новые фильтры «localize»/«unlocalize»: https://docs.djangoproject.com/en/dev/topics/i18n/localization/#unlocalize – VolkA

+0

Это ответ –

+1

'stringformat:" f "' уменьшается до 6 десятичных знаков (например, 4.3550434558 становится 4.355043). Ответ @justinhui не (то есть использование 'unlocalize'). –

2

Вы можете использовать пользовательские formats.py (см «Creating custom format files» в документации Django) и определить THOUSAND_SEPARATOR и DECIMAL_SEPARATOR

THOUSAND_SEPARATOR = '' 
DECIMAL_SEPARATOR = '.' 

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

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

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

USE_L10N = False 

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

+0

благодарю вас за ответ, но просто удаление фильтра «floatformat» не работает. Должен ли я добавить еще один фильтр? –

2

У меня такая же проблема, и, как говорит piquadrat, это раздражающая ошибка, связанная с поддержкой локализации. Меняя USE_L10N = True на False, разрешите это, оно должно быть исправлено в Django 1.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 }}

8

У меня есть проблема рендеринга и лат LNG значения. Мое решение было:

{{ value|safe }} 
0

При печати некоторой переменной для 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) 
+0

Неверный фильтр: «jsonify» – SaeX

+0

Я сказал: «Напишите тег шаблона jsonify», вы его прочитали? –

+1

Конечно, я сделал :-) Но в то время, когда я сделал этот комментарий, ваш ответ не содержал ссылок на 'jsonify'. Он не существует по умолчанию в структуре Django. Для этого требуется установка внешнего пакета (https://pypi.python.org/pypi/django-jsonify/) или настраиваемый пользовательский фильтр jsonify, который вы только что включили в свой обновленный ответ. – SaeX

15

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

{% load l10n %} 

{{ value|unlocalize }} 

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

+2

Спасибо за ответ! IMO это, безусловно, самый прямой способ добиться того, что необходимо, потому что он отключает l10n .. поэтому вместо того, чтобы анализировать строку через l10n, а затем преобразовывать ее обратно, вы получаете форматирование числа программ без пуха. Также легко понять, что делает фильтр шаблонов. И последнее, но не менее важное: мы не отключили html-экранирование, которое должно рассматриваться как нормальное значение по умолчанию. – benjaoming

Смежные вопросы