Формат чисел в шаблонах Django

Я думаю, flatMap может быть лучшим способом справиться с этим.

sample.flatMap (external => external.values.map (inner => inner.value))

141
задан Oli 6 November 2009 в 19:43
поделиться

5 ответов

Django способствовал, гуманизировались, приложение делает это:

{% load humanize %}
{{ my_num|intcomma }}

Обязательно добавьте 'django.contrib.humanize' к Вашему INSTALLED_APPS список в settings.py файл.

279
ответ дан 23 November 2019 в 23:06
поделиться

Если Вы не хотите связываться с локалями, вот функция что числа форматов:

def int_format(value, decimal_points=3, seperator=u'.'):
    value = str(value)
    if len(value) <= decimal_points:
        return value
    # say here we have value = '12345' and the default params above
    parts = []
    while value:
        parts.append(value[-decimal_points:])
        value = value[:-decimal_points]
    # now we should have parts = ['345', '12']
    parts.reverse()
    # and the return value should be u'12.345'
    return seperator.join(parts)

Создание пользовательского шаблонного фильтра от этой функции тривиально.

11
ответ дан 23 November 2019 в 23:06
поделиться

Хорошо я не мог найти Django путем, но я действительно находил Python путем из моей модели:

def format_price(self):
    import locale
    locale.setlocale(locale.LC_ALL, '')
    return locale.format('%d', self.price, True)
2
ответ дан 23 November 2019 в 23:06
поделиться

Знайте, что изменение локали всего процесса и не ориентировано на многопотоковое исполнение (iow., может иметь побочные эффекты или может влиять на другой код, выполненный в рамках того же процесса).

Мое суждение: проверьте пакет Babel. Некоторые средства интеграции с шаблонами Django доступны.

1
ответ дан 23 November 2019 в 23:06
поделиться

Что касается решения NED Batchelder, вот с 2 десятичными точками и знаком доллара. Это идет где-то вроде my_app / templateTags / my_filters.py

from django import template
from django.contrib.humanize.templatetags.humanize import intcomma

register = template.Library()

def currency(dollars):
    dollars = round(float(dollars), 2)
    return "$%s%s" % (intcomma(int(dollars)), ("%0.2f" % dollars)[-3:])

register.filter('currency', currency)

Тогда вы можете

{% load my_filters %}
{{my_dollars | currency}}
59
ответ дан 23 November 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: