它可以写
{{ myval.add:5 }}
、{{ myval|add:value }}
甚至{{ myval|add:-5 }}
。
但是,我找不到应该输入什么来添加值* -1,例如
{{ myval|add:-value }}
。遗憾的是,这不起作用。
您需要使用双引号:
{{ myval|add:"-5" }}
这会从
myval
中减去 5。
内置的 Django 模板标签/过滤器并不包罗万象,但编写自己的自定义模板标签非常容易:https://docs.djangoproject.com/en/dev/howto/custom-template-标签/
您可以轻松制作自己的
subtract
模板标签:
@register.filter
def subtract(value, arg):
return value - arg
使用 PyPI 中的
django-mathfilters
:https://pypi.python.org/pypi/django-mathfilters
安装:
$ pip install django-mathfilters
然后将
mathfilters
添加到您的 INSTALLED_APPS
中。
在模板中:
{% 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,也偶然发现了这个:我需要一个非常简单的模板循环,它在 n 次后停止打印,并显示一个“更多”链接来切换其余项目。
我怀着极大的兴趣阅读了人们试图理解为什么它没有被添加到 Django 默认过滤器中的挣扎(从 2013 年开始)。 我不想创建自定义模板标签,我找到了一种使用字符串和
add
结合 with
和 stringformat
减去 2 个变量的方法
假设我有一个项目列表,我想打印前 2 个项目并隐藏其余项目,例如显示有多少隐藏项目。
John、Anna 和其他 5 个人喜欢这样(当给出 7 个项目的列表时)
只要可见项目的数量在模板中进行了编码(例如 2),就可以添加负 2
|add:"-2"
,但我希望可见项目的数量也成为一个变量。 上面建议的数学过滤器库似乎不是最新的(我还没有使用 Django 2.x 对其进行测试)。
技巧似乎是使用
add
帮助器将字符串“-”与整数作为字符串连接起来,因此在对 add
帮助器的任何连续调用中都可以将其强制返回负整数。 但是,如果该值不是字符串,则这不起作用,因此这就是 stringformat
帮助器的用武之地。
template
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 primero es multiplicar por -1 para conversionirlo en una valor negativo y Guardarlo en una Variable y after a usar la suma
首先乘以-1,变成负值 并将其保存在变量中,然后使用 add
{% widthratio val2 1 -1 as result %}
{{result|add:val1}}
如果您正在访问的变量属于 ORM 对象,如下所示:
{{ obj.my_val|add:-obj.other_val }}
您可以简单地在 django 模型上实现一个属性。
Class Obj(models.Model):
my_val = PositiveIntegerField()
other_val = PositiveIntegerField()
@property
val_diff(self):
return self.my_val - self.other_val
然后像属性一样使用它:
{{ obj.val_diff }}
经过搜索我发现我可以用
filters来制作
{% with var=value %}
来进行算术运算“是否有其他变量”
x = 5
和 y = 3
,需要将 y
的值添加到 x
值,我需要的就是以下步骤:{% with x=5 %}
{% with y=3 %}
<h1>
,写下:<h1>{{ x|add:y }}</h1>
{% endwith %}
{% endwith %}
{% with i=3 %}
{% with x=1 %}
<h1>{{i|add:x}}</h1> <!-- result is 4 -->
{% endwith %}
{% endwith %}