Он может писать {{ 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 }}
. Это не работает, к сожалению.
Встроенные теги/фильтры шаблона Django не являются всеобъемлющими, но очень легко написать свои собственные теги шаблона: https://docs.djangoproject.com/en/dev/howto/custom.-template-tags/
Вы можете довольно легко создать свой собственный тег шаблона subtract
:
@register.filter
def subtract(value, arg):
return value - arg
Вам нужно использовать двойные кавычки:
{{ myval|add:"-5" }}
Это вычитает пять из myval
.
x == 5
и y == 2
, как выразить x - y
в шаблоне?
- person Gershy; 03.11.2015
myval|subtract:anotherval
- person Ev.; 25.02.2016
https://pypi.python.org/pypi/django-mathfilters
установить : $ pip установить django-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
.
- person suhailvs; 14.10.2020
Недавно я начал работать с Django и тоже наткнулся на это: мне нужен был очень простой цикл шаблона, который останавливает печать после n раз и показывает ссылку «еще» для переключения остальных элементов.
С большим интересом читаю борьбу людей, пытающихся понять, почему это не добавляется в фильтры Django по умолчанию (с до 2013 года). Мне не хотелось создавать собственный тег шаблона, и я нашел способ вычесть 2 переменные, используя строки и add
в сочетании с with
и stringformat
Допустим, у меня есть список элементов, в которых я хочу напечатать первые 2 и скрыть остальные, показав, сколько там скрытых элементов, например.
Джону, Анне и еще 5 нравится это (при наличии списка из 7 пунктов)
Пока количество видимых элементов закодировано в шаблоне (например, 2), можно добавить отрицательное значение 2 |add:"-2"
, но я хотел, чтобы количество видимых элементов также было переменной. Библиотека Math-filter, предложенная выше, кажется устаревшей (я не тестировал ее с 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 primero es multiplicar por -1 para convertirlo en una valor negativo y guardarlo en una variable y posterior a usar la suma
Во-первых, нужно умножить на -1, чтобы превратить его в отрицательное значение и сохранить его в переменной, а затем использовать команду add.
{% widthratio val2 1 -1 as result %}
{{result|add:val1}}