所以,我有一个十进制字段,可以是3个不同的值。在我看来, 我传入一个包含适当小数的值字典 值作为键。
{% for item in booklist %}
{% for key, value in numvec.items %}
{{item.number}}
{% ifequals item.number {{key}} %}
{{value}}
{% endifequals %}
{% endfor %}
{% endfor %}
这是我作为numvec传递的词典:
numvec = {"TEST":Decimal("0.999"), "TEST2":Decimal("0.500"),
“TEST3”:十进制( “0.255”)}
数字字段被定义为在我的模型中有这些选择:
BOOK_CHOICES=((Decimal("0.999"), 'TEST'),(Decimal("0.500"), 'TEST2'),(Decimal("0.255"), 'TEST3'),)
如果我比较字典,项目编号在视图中打印得很好 使用属性,但由于某种原因ifequals不能正常 比较两位小数。这是一个错误,还是我在做什么 在ifequals的模板中有错误吗?
答案 0 :(得分:11)
这不是一个错误,可能来实现您想要做的事情。
然而,首先是关于你的代码的几点评论:
{% ifequal item.number {{key}} %}
将导致TemplateSyntaxError异常。现在的解决方案:
这是示例:
{% for item in decimals %}
{% if item|stringformat:"s" == variable %}
{{ variable }}
{% endif %}
{% endfor %}
答案 1 :(得分:2)
根据this,您似乎只能比较字符串。如果我是你,我会自己制作template tag。
答案 2 :(得分:2)
解决方案:
{% for item in decimals %}
{% if item|stringformat:"s" == variable %}
{{ variable }}
{% endif %}
{% endfor %}
适用于将小数(如循环)与字符串(如传递值)进行比较
答案 3 :(得分:0)
最简单的解决方案是在模型上定义一个封装数字逻辑并返回人性化字符串的方法。
或者您可以编写模板标签来执行此操作,这是更多的代码,但可能会更好地保留模型/视图层分离。
答案 4 :(得分:0)
目前尚不清楚这是否有助于Ardesco,但template_utils有if_greater
,if_greater_or_equal
,if_less
,if_less_or_equal
标签(等等)这解决了普通ifequals
不够的非常相关的情况。
安装后只需添加template_utils
,在INSTALLED_APPS
下执行django settings.py,然后将{% load comparison %}
放入模板中
答案 5 :(得分:0)
相反,像1.1和2.2这样的数字在二进制浮点中没有精确的表示。 >>
E.g。如果你
print Decimal(3.59)
你得到了
3.589999999999999857891452847979962825775146484375
因此,如果你在django模板中比较两个小数,最好使用@Oleg Sakharov的答案,或者你可以使用相同的方法,但不同的格式字符串如:
if item|stringformat:".2f" == "3.59"