Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django模板ifequal小数比较_Python_Django_Django Templates - Fatal编程技术网

Python Django模板ifequal小数比较

Python Django模板ifequal小数比较,python,django,django-templates,Python,Django,Django Templates,所以,我有一个十进制字段,可以是3个不同的值。在我看来,, 我传入一个包含适当小数点的值字典 值作为键 {% for item in booklist %} {% for key, value in numvec.items %} {{item.number}} {% ifequals item.number {{key}} %} {{value}} {% endifequals %}

所以,我有一个十进制字段,可以是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'),)
如果我比较dict,则项目编号在视图中打印得很好 属性,但由于某些原因,ifequals无法正确 比较两个小数。这是一只虫子,还是我在做什么
ifequals在我的模板中出错

根据,您似乎只能比较字符串。如果我是你,我会做我自己的

根据,您似乎只能比较字符串。如果我是你,我会做我自己的

最简单的解决方案是在模型上定义一个方法,该方法封装数字逻辑并返回人性化字符串


或者您可以编写一个模板标记来完成此操作,这需要编写更多的代码,但可能会更好地保留模型/视图层的分离。

最简单的解决方案是在模型上定义一个方法,该方法封装数字逻辑并返回人性化字符串


或者您可以编写一个模板标记来完成这项工作,这需要编写更多的代码,但可能会更好地保留模型/视图层分离。

这是否有助于Ardesco,还不太清楚,但有一些标记有
如果大于
如果大于或等于
如果小于
如果小于或等于
等它解决了一些非常相关的情况,其中简单的
ifequals
是不够的


安装后,只需添加
template\u utils
已安装的应用程序下执行django settings.py,然后将
{%load comparison%}
放在模板中
不太清楚这是否有助于Ardesco,但有
如果大于
如果大于或等于
如果小于
if_less_或_equal
标记(以及其他标记),用于解决简单的
ifequals
不够的相关情况


安装后,只需添加
template\u utils
INSTALLED\u APPS
下执行django settings.py,然后将
{%load comparison%}
放在模板中

这不是一个bug,有可能实现您的目标

但是,首先要对您的代码说几句话:

  • 没有“ifequals/endifequals”运算符。你要么使用,要么使用
  • 第二件事。如果在“ifequal”或“if”运算符中保留双花括号,则代码
    {%ifequal item.number{{{key}}}%}
    将导致TemplateSyntaxError异常
现在解决方案是:

  • 只需使用过滤器将十进制值转换为字符串即可
  • 在运算符中使用变量时跳过花括号
  • 不要忘记“if”或“ifequal”运算符中的变量始终表示为字符串
  • 以下是一个例子:


    这不是一个bug,实现您想要做的事情是可能的

    但是,首先要对您的代码说几句话:

    • 没有“ifequals/endifequals”运算符。你要么使用,要么使用
    • 第二件事。如果在“ifequal”或“if”运算符中保留双花括号,则代码
      {%ifequal item.number{{{key}}}%}
      将导致TemplateSyntaxError异常
    现在解决方案是:

  • 只需使用过滤器将十进制值转换为字符串即可
  • 在运算符中使用变量时跳过花括号
  • 不要忘记“if”或“ifequal”运算符中的变量始终表示为字符串
  • 以下是一个例子:

    解决方案:

    {% for item in decimals %}  
      {% if item|stringformat:"s" == variable %}  
        {{ variable }}
      {% endif %}  
    {% endfor %}
    
    将十进制(如循环)与字符串(如传递的值)进行比较非常有效。

    解决方案:

    {% for item in decimals %}  
      {% if item|stringformat:"s" == variable %}  
        {{ variable }}
      {% endif %}  
    {% endfor %}
    

    比较十进制(如循环)和字符串(如传递的值)非常有效。

    相反,像1.1和2.2这样的数字在二进制浮点中没有精确的表示形式

    如果你

    print Decimal(3.59)
    
    你得到

    3.589999999999999857891452847979962825775146484375
    
    因此,如果比较django模板中的两个小数,最好使用@Oleg Sakharov的答案,或者也可以使用相同的方法但格式不同的字符串,如:

    if item|stringformat:".2f" == "3.59"
    

    相反,像1.1和2.2这样的数字在二进制浮点中没有精确的表示

    如果你

    print Decimal(3.59)
    
    你得到

    3.589999999999999857891452847979962825775146484375
    
    因此,如果比较django模板中的两个小数,最好使用@Oleg Sakharov的答案,或者也可以使用相同的方法但格式不同的字符串,如:

    if item|stringformat:".2f" == "3.59"
    

    这可能是个bug。但对于键来说,OTOH小数是一个糟糕的选择。另外,我也不知道你想用这个模板完成什么。你能详细说明一下这个例子吗。另外,请缩进您的代码snipplet,使其适当突出显示。因此,在我的示例中,numvec是一个用于某些数值计算的值。在展示图书报告时,我想在模板中显示“TEST”、“TEST2”等,而不是原始的十进制值,因为这对阅读报告的人更有价值。这可能是一个bug。但对于键来说,OTOH小数是一个糟糕的选择。另外,我也不知道你想用这个模板完成什么。你能详细说明一下这个例子吗。另外,请缩进您的代码snipplet,使其适当突出显示。因此,在我的示例中,numvec是一个用于某些数值计算的值。在展示图书报告时,我想在模板中显示“TEST”、“TEST2”等,而不是原始的十进制值,因为这对阅读报告的人来说更有价值。你确定吗?它说“只能将参数与模板变量或字符串进行比较。”我的重点补充道。你确定吗?它说“只能将参数与模板变量或字符串进行比较。”