【发布时间】:2012-04-14 10:34:52
【问题描述】:
它可以写{{ myval.add:5 }}、{{ myval|add:value }}甚至{{ myval|add:-5 }}。
但是,我不知道应该键入什么来添加值 * -1,例如 {{ myval|add:-value }}。很遗憾,这不起作用。
【问题讨论】:
它可以写{{ myval.add:5 }}、{{ myval|add:value }}甚至{{ myval|add:-5 }}。
但是,我不知道应该键入什么来添加值 * -1,例如 {{ myval|add:-value }}。很遗憾,这不起作用。
【问题讨论】:
你需要使用双引号:
{{ myval|add:"-5" }}
这会从myval 中减去 5。
【讨论】:
x == 5和y == 2,如何在模板中表达x - y?
内置的 Django 模板标签/过滤器并非包罗万象,但编写自己的自定义模板标签非常容易:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/
您可以很容易地制作自己的subtract 模板标签:
@register.filter
def subtract(value, arg):
return value - arg
【讨论】:
使用来自 PyPI 的 django-mathfilters:https://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>
【讨论】:
mathfilters 添加到您的INSTALLED_APPS。
我最近开始使用 Django,也偶然发现了这个:我需要一个非常简单的模板循环,它会在 n 次后停止打印并显示一个“更多”链接来切换其余项目。
我怀着极大的兴趣阅读了人们试图理解为什么没有将其添加到 Django 默认过滤器中的挣扎(自 2013 年以来)。我不想创建自定义模板标签,我找到了一种方法来使用字符串和 add 以及 with 和 stringformat 相结合来减去 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 的初学者,我很确定这种方法比实际创建自定义帮助器要糟糕得多!所以我不建议任何人都应该使用它。这只是我尝试使用可用的模板助手解决这个问题而没有任何自定义的东西。
希望对你有帮助
【讨论】:
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}}
【讨论】:
经过搜索,我发现我可以用 filters 制作{% with var=value %} 来进行算术运算“是否使用其他变量”
例如:我有x = 5 和y = 3 并且需要将y 的值添加到x 值,我需要的只是这些步骤:
1- 创建变量 x:{% with x=5 %}
2- 创建变量 y:{% with y=3 %}
3- 在我的 HTML 标签中,说<h1>,写下:<h1>{{ x|add:y }}</h1>
4- 关闭 y 与:{% endwith %}
5- 关闭 x :{% endwith %}
希望它适用于你,它适用于我。
{% with i=3 %}
{% with x=1 %}
<h1>{{i|add:x}}</h1> <!-- result is 4 -->
{% endwith %}
{% endwith %}
【讨论】: