【问题标题】:Is there a filter for divide for Django Template?Django模板是否有用于划分的过滤器?
【发布时间】:2012-01-16 21:19:24
【问题描述】:

我注意到有内置的add 过滤器,但我找不到divide

我是 Django 新手,不确定是否有这样的过滤器。

【问题讨论】:

    标签: python django


    【解决方案1】:

    没有。但如果你是一个小黑客......

    http://slacy.com/blog/2010/07/using-djangos-widthratio-template-tag-for-multiplication-division/

    计算 A*B:{% widthratio A 1 B %}

    计算 A/B:{% widthratio A B 1 %}

    计算 A^2:{% widthratio A 1 A %}

    计算 (A+B)^2: {% widthratio A|add:B 1 A|add:B %}

    计算 (A+B) * (C+D): {% widthratio A|add:B 1 C|add:D %}

    您也可以在 2 分钟内创建一个过滤器来划分

    【讨论】:

    • 这是对 widthratio 标签的一个有趣的使用,但是,它肯定会让一些人摸不着头脑,试图弄清楚它在做什么,imo。
    • 链接已修复,抱歉造成停机。 :)
    • 无论如何,内容都应该放在答案上,即使有链接。 :)
    • 请记住,widthratio 返回一个字符串,您需要将其转换为整数,以便它在比较中工作。这样做的一种好方法是:stackoverflow.com/a/7405779/5421745
    • @RickDavies 内容在答案中。该链接包含下一个信息:计算 A*B: {% widthratio A 1 B %} \n 计算 A/B: {% widthratio A B 1 %} ...
    【解决方案2】:

    使用自定义过滤器:

    register = template.Library()
    
    @register.filter
    def divide(value, arg):
        try:
            return int(value) / int(arg)
        except (ValueError, ZeroDivisionError):
            return None
    

    【讨论】:

    • 你应该管理浮点数的情况,它可能会在一段时间内有用:-)
    • 它可能被零除,所以我建议:def divide(value, arg): return (int(value) / int(arg)) if int(arg)!=0 else 0
    • 如果您展示了如何实际使用过滤器,那将非常有帮助。
    【解决方案3】:

    您的模板中有一个 Python 模块可以进行数学运算:Django-Mathfilters

    它包含add如你所说,还包含div来划分:

     8 / 3 = {{ 8|div:3 }}
    

    【讨论】:

      【解决方案4】:

      我会使用自定义模板,但如果您不想使用,可以使用内置标签的 widthratio,

      {% widthratio request.session.get_expiry_age 3600 1 %} 
      

      另一个例子

      {% widthratio value 1150000 100 %}
      

      语法:

      {% widthratio parm1 parm2 parm3 %}
      

      所以基本上它用于缩放图像,但您可以将其用于分割。它的作用是:parm1/parm2 * parm3。

      希望这会有所帮助,更多关于 widthratio here.

      【讨论】:

        【解决方案5】:

        查看http://djangosnippets.org/snippets/2424/

        希望对你有所帮助。

        【讨论】:

          【解决方案6】:

          你可以使用divisibleby

          如果值可以被参数整除,则返回 True。

          例如:

          {{ value|divisibleby:"3" }}

          如果值为 21,则输出为 True。

          你可以看到django docs

          【讨论】:

            猜你喜欢
            • 2011-02-14
            • 2012-02-23
            • 1970-01-01
            • 2017-04-30
            • 2012-06-03
            • 1970-01-01
            • 2017-12-30
            • 2011-10-08
            • 2020-04-09
            相关资源
            最近更新 更多