我正在通过开始django电子商务应用程序的购物车应用程序。我得到的错误如上所述,而点击添加到购物车按钮。在{{ cart_sutotal|currency}}行出现错误
{{ cart_sutotal|currency}}
kmpatx3s1#
我记得那本书......你在做一个自定义模板过滤器对吧?你需要把传入locale.currency的值从字符串转换成int/decimal/float。避免货币舍入错误的最佳做法是使用decimal程序包。导入decimal程序包并通过Decimal函数传递值以解决此问题。
locale.currency
int
decimal
float
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)
3bygqnnd2#
从Python文档中。
出现的错误表明您正在将str参数传递给abs()方法,因为它需要选择上述参数。解决方案是将integer对象显式传递给abs方法。
str
abs()
integer
>>>number = "1" >>>print abs(int(number)) 1 >>>
lztngnrs3#
currency筛选器要求其参数为数值;你传递给模板的字符串是cart_sutotal。在将它传递给模板之前,先将它转换成十进制,十进制,或者更好的是,弄清楚为什么要将价格值相加,并得出一个字符串作为小计。
currency
cart_sutotal
yx2lnoni4#
您的代码中缺少一个类型转换。无论在代码中何处执行abs(somevar),都需要通过执行abs(int(somevar))将字符串转换为整数。如果您发布堆栈跟踪或代码片段,将获得更多信息。
abs(somevar)
abs(int(somevar))
vbkedwbf5#
我认为你写的代码来自“Django电子商务入门”一书。错误在于你写的代码是{{ cart_sutotal|currency }}而不是{{ cart_subtotal }}。
{{ cart_sutotal|currency }}
{{ cart_subtotal }}
qv7cva1a6#
abs()的操作数类型错误:字符串
我解决了这个问题,想分享我的发现。
可能原因:带有“NaN”的十进制字段(或任何数字字段)
在我的例子中,我最终得到了“NaN”试图进入Decimal表单字段,这使得模板处理器在 *django/utils/ www.example.com * 中遇到了这个异常numberformat.py。我必须找出我在数据库中保存“NaN”的位置。
6条答案
按热度按时间kmpatx3s1#
我记得那本书......你在做一个自定义模板过滤器对吧?你需要把传入
locale.currency
的值从字符串转换成int
/decimal
/float
。避免货币舍入错误的最佳做法是使用
decimal
程序包。导入decimal程序包并通过Decimal
函数传递值以解决此问题。因此,您的代码应该如下所示:
3bygqnnd2#
从Python文档中。
出现的错误表明您正在将
str
参数传递给abs()
方法,因为它需要选择上述参数。解决方案是将integer
对象显式传递给abs方法。示例:
lztngnrs3#
currency
筛选器要求其参数为数值;你传递给模板的字符串是cart_sutotal
。在将它传递给模板之前,先将它转换成十进制,十进制,或者更好的是,弄清楚为什么要将价格值相加,并得出一个字符串作为小计。
yx2lnoni4#
您的代码中缺少一个类型转换。无论在代码中何处执行
abs(somevar)
,都需要通过执行abs(int(somevar))
将字符串转换为整数。如果您发布堆栈跟踪或代码片段,将获得更多信息。vbkedwbf5#
我认为你写的代码来自“Django电子商务入门”一书。错误在于你写的代码是
{{ cart_sutotal|currency }}
而不是{{ cart_subtotal }}
。qv7cva1a6#
abs()的操作数类型错误:字符串
我解决了这个问题,想分享我的发现。
可能原因:带有“NaN”的十进制字段(或任何数字字段)
在我的例子中,我最终得到了“NaN”试图进入Decimal表单字段,这使得模板处理器在 *django/utils/ www.example.com * 中遇到了这个异常numberformat.py。我必须找出我在数据库中保存“NaN”的位置。