Удалить десятичную точку из числа, переданного в шаблон Django? - PullRequest
0 голосов
/ 02 января 2019

Я использую полосу для обработки платежей с помощью веб-приложения django.

Цены в базе данных хранятся в десятичном формате, например, 100,00

Полоса принимает это за 1 доллар и игнорирует всесправа от десятичной точки.

Мне нужно удалить десятичную точку при передаче этого числа в Stripe.

Могу ли я сделать это в шаблоне django?

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Я думаю, вы можете использовать пользовательский фильтр в шаблонах, например:

from django import template

register = template.Library()

@register.filter
def remove_decimal_point(value):
    return value.replace(".","")

И используйте его в шаблоне так:

{% load remove_decimal_point %}

....

{{ val|remove_decimal_point }}
0 голосов
/ 02 января 2019

Это немного зависит от вашей реализации. Примерно так должно работать во всех случаях:

total_price = 123.4567
stripe_price = str(int(round(total_price, 2) * 100))

Это производит:

'12346'

Сначала округляется до двух десятичных знаков, умножается на 100, приводится к целому числу, а затем к строке. В зависимости от вашей интеграции Stripe, вы можете пропустить приведение к целому числу и строке.

Пропуск приведения к int приведет к такому результату:

>> str(round(total_price, 2) * 100)
>> '12346.00'

Это все равно будет работать, поскольку Stripe удаляет все после десятичной дроби, но, возможно, вам не нужны эти конечные нули.

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

@register.filter(name='stripeconversion')
def stripe_value(total_price):
    return str(int(round(total_price, 2) * 100))

и используйте его в шаблоне:

{{ total_price|stripeconversion }}
0 голосов
/ 02 января 2019

Используя Фильтр формата FLoat , вы можете сделать это:

{{ value.context|floatformat }}

EDIT

Особенно полезно передавать 0 (ноль) в качестве аргумента, который округляет число с плавающей точкой до ближайшего целого числа.

value       Template                        Output
34.23234    {{ value|floatformat:"0" }}     34
34.00000    {{ value|floatformat:"0" }}     34
39.56000    {{ value|floatformat:"0" }}     40
...