Python 显式应用str()与允许Django自己进行比较会在模板中产生不同的结果

Python 显式应用str()与允许Django自己进行比较会在模板中产生不同的结果,python,django,django-templates,Python,Django,Django Templates,给定一个模板{{foo}{{bar}和一个上下文{'foo':Decimal('12.34'),'bar':str(Decimal('12.34'))},模板呈现为12,34 12.34。为什么结果会不同?这将是Django为您所做的。您可以通过在您的设置中将USE\u L10N设置为False来禁用它 对于您的特定问题,您可以将十进制分隔符设置为a点而不是逗号,因此在您的设置中,它将是: DECIMAL_SEPARATOR = '.' 因为foo是一个数字(Decimal类型),并根据应用程

给定一个模板
{{foo}{{bar}
和一个上下文
{'foo':Decimal('12.34'),'bar':str(Decimal('12.34'))}
,模板呈现为
12,34 12.34
。为什么结果会不同?

这将是Django为您所做的。您可以通过在您的设置中将
USE\u L10N
设置为
False
来禁用它

对于您的特定问题,您可以将
十进制分隔符设置为a点而不是逗号,因此在您的设置中,它将是:

DECIMAL_SEPARATOR = '.'

因为
foo
是一个数字(
Decimal
类型),并根据应用程序的当前本地化设置格式。在您设置的语言中,十进制分隔符是逗号

另一方面,
bar
是一个字符串,由Python格式化。将
str
应用于
Decimal
时,字符串表示法不考虑Django项目的本地化(因为它是Python方法,与Django无关),并返回带有点的通用“英语”格式

Django只能对数字对象(以及日期和时间等)应用格式本地化,而不能对普通字符串应用格式本地化。要分析每个字符串以检查是否有数字以及是否需要格式化,这将是一件非常繁重的事情


.

但它究竟是如何工作的?如果isinstance(value,Decimal):
子句或什么,它是否有一些
?我认为文档说明了一些东西,它只是将任何非字符串值转换为字符串。此外,如果我只需要以JavaScript可解析的方式输出值,那么全局禁用L10N感觉不是一个好主意。有过滤器吗?创建一个只包含
str
调用的筛选器标记感觉很蹩脚。是的,使用
isinstance
确实有效。您可以使用其他设置来解决问题,您可以查看它们。谢谢!我刚刚找到了允许逐个禁用l10n的标签。对我来说,这似乎是一种适当的待遇。