Я думаю, flatMap может быть лучшим способом справиться с этим.
sample.flatMap (external => external.values.map (inner => inner.value))
Django способствовал, гуманизировались, приложение делает это:
{% load humanize %}
{{ my_num|intcomma }}
Обязательно добавьте 'django.contrib.humanize'
к Вашему INSTALLED_APPS
список в settings.py
файл.
Если Вы не хотите связываться с локалями, вот функция что числа форматов:
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)
Создание пользовательского шаблонного фильтра от этой функции тривиально.
Хорошо я не мог найти Django путем, но я действительно находил Python путем из моей модели:
def format_price(self):
import locale
locale.setlocale(locale.LC_ALL, '')
return locale.format('%d', self.price, True)
Знайте, что изменение локали всего процесса и не ориентировано на многопотоковое исполнение (iow., может иметь побочные эффекты или может влиять на другой код, выполненный в рамках того же процесса).
Мое суждение: проверьте пакет Babel. Некоторые средства интеграции с шаблонами Django доступны.
Что касается решения 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}}