1

我正在浏览购物车应用程序的初始 django 电子商务应用程序。单击添加到购物车按钮时,我收到上述错误。

我在线上遇到错误{{ cart_sutotal|currency}}

4

5 回答 5

2

我记得那本书...您正在制作自定义模板过滤器,对吗?您需要将传入的值从locale.currency字符串转换为int// decimalfloat

避免使用货币舍入错误的最佳做法是使用decimal包。导入十进制包并通过Decimal函数传递您的值以解决问题。

    from decimal import Decimal
    value = Decimal(value)

所以你的代码应该是这样的:

    from django import template

    import locale
    from decimal import Decimal

    register = template.Library()    
    
    @register.filter(name='currency')    
    def currency(value):    
        try:    
            locale.setlocale(locale.LC_ALL,'en_US.UTF-8')    
        except:    
            locale.setlocale(locale.LC_ALL,'')    
        value = Decimal(value)    
        loc = locale.localeconv()    
        return locale.currency(value, loc['currency_symbol'], grouping=True)
于 2014-06-19T14:51:52.033 回答
1

过滤器期望它的currency参数是一个数值;您将字符串作为cart_sutotal.

在将其传递给模板之前,将其转换为小数。十进制,或者,更好的是,弄清楚为什么要将价格值相加并为小计提供一个字符串。

于 2013-01-02T12:12:21.620 回答
1

来自python 文档

绝对()

返回一个数字的绝对值。参数可以是普通整数或长整数或浮点数。如果参数是复数,则返回其大小。

引发的错误表明您正在将str参数传递给abs()方法,因为它期望选择上述参数。解决方案是将integer对象显式传递给 abs 方法。

例子:

>>>number = "1"
>>>print abs(int(number))
1
>>>
于 2013-01-02T11:20:30.330 回答
0

您在代码中的某处缺少演员表。无论您在代码中的哪个位置,都abs(somevar)需要通过执行将字符串转换为整数abs(int(somevar))。如果您发布堆栈跟踪或代码片段,则可以获得更多信息。

于 2013-01-02T10:46:39.440 回答
0

我认为您正在编写“开始 Django 电子商务”一书中的代码。错误出现在您编写的代码{{ cart_sutotal|currency }}中,而不是{{ cart_subtotal }}.

于 2013-08-24T23:53:02.287 回答