Django模板ifequal比较小数

1 python django django-templates

所以,我有一个十进制字段,可以是3个不同的值.在我看来,我传入一个包含适当的十进制值作为键的值字典.

{% for item in booklist %}  
    {% for key, value in numvec.items %}  
        {{item.number}}  
        {% ifequals item.number {{key}} %}  
            {{value}}  
        {% endifequals %}  
    {% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这是我作为numvec传入的字典:

numvec = {"TEST":Decimal("0.999"), "TEST2":Decimal("0.500"),
Run Code Online (Sandbox Code Playgroud)

"TEST3":十进制( "0.255")}

数字字段被定义为在我的模型中有这些选择:

BOOK_CHOICES=((Decimal("0.999"), 'TEST'),(Decimal("0.500"), 'TEST2'),(Decimal("0.255"), 'TEST3'),)
Run Code Online (Sandbox Code Playgroud)

如果我将dict与属性进行比较,则项目编号在视图中打印得很好,但由于某种原因,ifequals无法正确地比较两个小数.这是一个错误,还是我在使用ifequals的模板中做错了什么?

Ole*_*rov 11

它不是一个错误,它可以实现你想要做的事情.

但是,首先关于您的代码的几点评论:

  • 没有"ifequals/endifequals"运算符.您可以使用"ifequal/endifequal""if/endif".
  • 第二件事.{% ifequal item.number {{key}} %}如果在"ifequal"或"if"运算符中留下双花括号,则代码将导致TemplateSyntaxError异常.

现在的解决方案:

  1. 只需使用"stringformat"过滤器将十进制值转换为字符串即可.
  2. 在运算符内使用变量时,请跳过大括号.
  3. 不要忘记"if"或"ifequal"运算符中的变量始终表示为字符串.

这是一个例子:

{% for item in decimals %}  
  {% if item|stringformat:"s" == variable %}  
    {{ variable }}
  {% endif %}  
{% endfor %}
Run Code Online (Sandbox Code Playgroud)