Шаблон Django: локализовать номер, возвращаемый из простого тега

Надеюсь, что этого вопроса здесь нет, я долго гуглил и ничего не нашел. У меня проблема с форматированием чисел в шаблонах, но какая-то особенная. Может быть, это целая проблема, как вызывать фильтры для значений, возвращаемых из простых тегов. Итак, сначала немного фактов:

  • с использованием Python 2.7 и Django 1.5
  • В чешском языке мы используем запятую "," в качестве десятичного разделителя и, возможно, пробел " " в качестве разделителя тысяч (чаще всего для записи чисел без разделителя тысяч).
  • Обычно запись числа с помощью {{ price }} печатает, например. 16,0

По какой-то причине мне приходится работать с числами в шаблоне:

{% count_basic price.leafletPrice.price product.amount product.amount_unit product.category.basic_amount product.category.basic_amount_unit %}

count basic — это простой тег:

from django import template

register = template.Library()

@register.simple_tag
def count_basic(price, product_amount, product_unit, category_amount, category_unit):
    if product_unit == 'mililiter' or product_unit == 'gram':
        return (float(price) / product_amount) * 1000
    else:
        return float(price) / product_amount

В результате он не печатается как 16.0. Я установил l10n в settings.py на True:

USE_I18N = True
USE_L10N = True

Я также обнаружил, что «очеловечивание» работает, но, во-первых, я не знаю, как вызвать простой тег/фильтр со значением, возвращаемым из другого простого тега (может быть, с использованием with?), Во-вторых, если он работает для обычных чисел, почему бы не для числа возвращаются из простого тега? Номер плохо возвращается? Следует преобразовать? Я также пробовал возвращать значение как Decimal() и не работал.

Любое простое рабочее решение приветствуется.


person tomis    schedule 07.05.2013    source источник


Ответы (1)


Хорошо, наконец, я узнал, как это сделать. Я изменил свой простой тег, особенно возвращаемую часть (части), на:

from django.template.defaultfilters import floatformat

return floatformat(float(price) / product_amount, 2)

floatformat сделал шаблон для отображения числа в формате с запятой в качестве десятичного разделителя. Запрошено два знака после запятой (второй параметр floatformat).

person tomis    schedule 13.05.2013