【问题标题】:Variable subtraction in django templatesdjango模板中的变量减法
【发布时间】:2012-04-14 10:34:52
【问题描述】:

它可以写{{ myval.add:5 }}{{ myval|add:value }}甚至{{ myval|add:-5 }}

但是,我不知道应该键入什么来添加值 * -1,例如 {{ myval|add:-value }}。很遗憾,这不起作用。

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    你需要使用双引号:

    {{ myval|add:"-5" }}
    

    这会从myval 中减去 5。

    【讨论】:

    • 我需要从变量中减去值。
    • 是否可以在视图中而不是在模板中将值设为负数?
    • 谢谢,我一直在尝试构建一个减法过滤器,这更容易哈哈
    • 这不是一个好的答案。我需要从变量中减去一个变量。如果我有x == 5y == 2,如何在模板中表达x - y
    • 好的,谢谢!我只是想弄清楚是否唯一的方法是使用自定义模板标签。
    【解决方案2】:

    内置的 Django 模板标签/过滤器并非包罗万象,但编写自己的自定义模板标签非常容易:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

    您可以很容易地制作自己的subtract 模板标签:

    @register.filter
    def subtract(value, arg):
        return value - arg
    

    【讨论】:

    • 这样的任务不需要模板标签。请参阅 Simeon 的回答。
    • Simeon 的回答没有回答这个问题,因为它与减去变量中定义的数量有关。
    【解决方案3】:

    使用来自 PyPI 的 django-mathfiltershttps://pypi.python.org/pypi/django-mathfilters

    安装:

    $ pip install django-mathfilters
    

    然后在您的INSTALLED_APPS 中添加mathfilters

    在模板中:

    {% load mathfilters %}
    
    <ul>
        <li>8 + 3 = {{ 8|add:3 }}</li>
    
        <li>13 - 17 = {{ 13|sub:17 }}</li>
    
        {% with answer=42 %}
        <li>42 * 0.5 = {{ answer|mul:0.5 }}</li>
        {% endwith %}
    
        {% with numerator=12 denominator=3 %}
        <li>12 / 3 = {{ numerator|div:denominator }}</li>
        {% endwith %}
    
        <li>|-13| = {{ -13|abs }}</li>
    </ul>
    

    【讨论】:

    • 在我看来,这些应该包含在主要的 Django 发行版中。
    • 您需要将mathfilters 添加到您的INSTALLED_APPS
    【解决方案4】:

    我最近开始使用 Django,也偶然发现了这个:我需要一个非常简单的模板循环,它会在 n 次后停止打印并显示一个“更多”链接来切换其余项目。

    我怀着极大的兴趣阅读了人们试图理解为什么没有将其添加到 Django 默认过滤器中的挣扎(自 2013 年以来)。我不想创建自定义模板标签,我找到了一种方法来使用字符串和 add 以及 withstringformat 相结合来减去 2 个变量

    假设我有一个项目列表,我想在其中打印前 2 个并隐藏其余项目,显示有多少隐藏项目,例如。

    John、Anna 和其他 5 个人喜欢这样(当给出包含 7 项的列表时)

    只要可见项目的数量在模板中被硬编码(例如 2),就可以添加负数 2 |add:"-2",但我希望可见项目的数量也是一个变量。上面建议的数学过滤器库似乎不是最新的(我没有用 Django 2.x 测试过)。

    诀窍似乎是使用add 帮助器将字符串“-”与整数作为字符串连接,因此可以在对add 帮助器的任何连续调用中将其强制转换为负整数。但是,如果该值不是字符串,这将不起作用,这就是 stringformat 助手的用武之地。

    带字符串值

    模板posts.html(注意visible 是如何作为字符串显式传递的——下面的替代方案)

    {% for post in posts %}
      <h4>{{ post.title }}</h4>
      ...
      {% include 'show_likes.html' with likes=post.likes visible="3" %}
    {% endfor %}
    

    模板show_likes.html(注意add:0 使布尔运算符起作用)

    {% with show=visible|default:"2" %}
    {% for like in likes %}
      {% if forloop.counter <= show|add:0 %}
        {% if not forloop.first %},{% endif %}
        {{ like.username }}
      {% endif %}
    {% endfor %}
    {% if likes|length > show|add:0 %}
    {% with rest="-"|add:show %}
      and {{ likes|length|add:rest }} more
    {% endwith %}
    {% endif %}
    like this
    {% endwith %}
    

    整数替代

    您可以在调用模板中使用|stringformat:"d"将整数转换为字符串@

    如果您想要显示的可见项目的数量是一个整数,则您必须添加对 stringformat:"d" 的调用以将其转换为字符串

    模板posts.html

    {% for post in posts %}
      <h4>{{ post.title }}</h4>
      ...
      {% include 'show_likes.html' with likes=post.likes visible=3 %}
    {% endfor %}
    

    模板show_likes.html

    {% with show=visible|default:2 %}
    {% with show_str=show|stringformat:"d" %}
    {% for like in likes %}
      {% if forloop.counter <= show %}
        {% if not forloop.first %},{% endif %}
        {{ like.username }}
      {% endif %}
    {% endfor %}
    {% if likes|length > show|add:0 %}
    {% with rest="-"|add:show_str %}
      and {{ likes|length|add:rest }} more
    {% endwith %}
    {% endif %}
    {% endwith %}
    {% endwith %}
    

    由于我是 Django 和 Python 的初学者,我很确定这种方法比实际创建自定义帮助器要糟糕得多!所以我不建议任何人都应该使用它。这只是我尝试使用可用的模板助手解决这个问题而没有任何自定义的东西。

    希望对你有帮助

    【讨论】:

      【解决方案5】:

      Lo primeo es multiplicar por -1 para convertirlo en una valor negativo y guardarlo en una variable y later a usar la suma

      首先是乘以-1变成负值 并将其保存在变量中,然后使用添加

      {% widthratio val2 1 -1 as result %}
      {{result|add:val1}}
      

      【讨论】:

        【解决方案6】:

        经过搜索,我发现我可以用 filters 制作{% with var=value %} 来进行算术运算“是否使用其他变量”
        例如:我有x = 5y = 3 并且需要将y 的值添加到x 值,我需要的只是这些步骤:
        1- 创建变量 x:{% with x=5 %}
        2- 创建变量 y:{% with y=3 %}
        3- 在我的 HTML 标签中,&lt;h1&gt;,写下:&lt;h1&gt;{{ x|add:y }}&lt;/h1&gt;
        4- 关闭 y 与:{% endwith %}
        5- 关闭 x :{% endwith %}
        希望它适用于你,它适用于我。

        {% with i=3 %}
            {% with x=1 %}
                 <h1>{{i|add:x}}</h1> <!-- result is 4 -->
            {% endwith %}
        {% endwith %}
        

        【讨论】:

        • 问题是减法,你的答案是加值
        猜你喜欢
        • 1970-01-01
        • 2015-05-03
        • 2016-01-12
        • 2012-08-23
        • 2021-06-14
        • 1970-01-01
        相关资源
        最近更新 更多