我正在浏览购物车应用程序的初始 django 电子商务应用程序。单击添加到购物车按钮时,我收到上述错误。
我在线上遇到错误{{ cart_sutotal|currency}}
我正在浏览购物车应用程序的初始 django 电子商务应用程序。单击添加到购物车按钮时,我收到上述错误。
我在线上遇到错误{{ cart_sutotal|currency}}
我记得那本书...您正在制作自定义模板过滤器,对吗?您需要将传入的值从locale.currency
字符串转换为int
// decimal
。float
避免使用货币舍入错误的最佳做法是使用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)
过滤器期望它的currency
参数是一个数值;您将字符串作为cart_sutotal
.
在将其传递给模板之前,将其转换为小数。十进制,或者,更好的是,弄清楚为什么要将价格值相加并为小计提供一个字符串。
来自python 文档。
绝对()
返回一个数字的绝对值。参数可以是普通整数或长整数或浮点数。如果参数是复数,则返回其大小。
引发的错误表明您正在将str
参数传递给abs()
方法,因为它期望选择上述参数。解决方案是将integer
对象显式传递给 abs 方法。
>>>number = "1"
>>>print abs(int(number))
1
>>>
您在代码中的某处缺少演员表。无论您在代码中的哪个位置,都abs(somevar)
需要通过执行将字符串转换为整数abs(int(somevar))
。如果您发布堆栈跟踪或代码片段,则可以获得更多信息。
我认为您正在编写“开始 Django 电子商务”一书中的代码。错误出现在您编写的代码{{ cart_sutotal|currency }}
中,而不是{{ cart_subtotal }}
.