Как мне написать числовой for
цикл в шаблоне Django? Я имею в виду что-то вроде
for i = 1 to n
Как мне написать числовой for
цикл в шаблоне Django? Я имею в виду что-то вроде
for i = 1 to n
Я использовал простую технику, которая хорошо работает для небольших случаев без специальных тегов и дополнительного контекста. Иногда это пригодится
{% for i in '0123456789'|make_list %}
{{ forloop.counter }}
{% endfor %}
{% for i in "x"|rjust:"100" %}
источник
К сожалению, это не поддерживается в языке шаблонов Django. Есть целый пар из предложений , но они , кажется , немного сложнее. Я бы просто поместил переменную в контекст:
и в шаблоне:
источник
Мой взгляд на этот вопрос, я думаю, самый хороший. Я храню my_filters.py в каталоге templatetags.
И вы бы использовали так:
источник
range(1, 16)
чтобы получить номера, начиная с 1, а не 0.from django.template import Library;register = Library()
@register.filter(name='range') def filter_range(start, end): return range(start, end)
Потом привыкаешь{% for i in 1|range:6 %}{% endfor %}
. Смотрите полный ответ ниже ....try: return range(number) except: return []
. Таким образом, он никогда не вызывает ошибку и возвращает пустой массив (аналогично тому, как работает большинство шаблонных функций).Может быть так?
источник
Вы можете передать обязательство
к шаблону, затем сделайте
Обратите внимание, что вы получите поведение на основе 0 (0, 1, ... n-1).
(Обновлено для совместимости с Python3)
источник
range(n)
в Python 3, если я правильно помню, xrange был объявлен устаревшимВы сами не передаете
n
, а вместо этогоrange(n)
[список целых чисел от 0 до n-1 включается], от вашего взгляда к вашему шаблону, и в последнем вы делаете{% for i in therange %}
(если вы абсолютно настаиваете на 1, а не на нормальном 0 индекс на основе вы можете использоватьforloop.counter
в теле цикла ;-).источник
Просто, если кто-то еще сталкивается с этим вопросом ... Я создал тег шаблона, который позволяет вам создать
range(...)
: http://www.djangosnippets.org/snippets/1926/источник
Я очень старался в этом вопросе, и я нахожу лучший ответ здесь: (из того, как выполнить цикл 7 раз в шаблонах django )
Вы даже можете получить доступ к idx!
views.py:
HTML:
источник
Вы можете пройти:
{'n': range (n)}
Чтобы использовать шаблон:
{% для i в n%} ... {% endfor%}
источник
Вы должны использовать « slice » в шаблоне, например, так:
в views.py
в store_list.html:
источник
Этот метод поддерживает все функциональные возможности стандартной
range([start,] stop[, step])
функции<app>/templatetags/range.py
Использование:
Вывод
источник
for value in 0|range:"10,2"
. Вы должны изменить свой код следующим образом:args = filter(lambda x: isinstance(x, int) and x >= 0, (_min, _max, _step))
Я просто продолжаю популярный ответ и делаю его более надежным. Это позволяет вам указать любую начальную точку, например 0 или 1. Он также использует функцию диапазона Python, где конец на единицу меньше, поэтому его можно использовать напрямую с длинами списка, например.
Затем в свой шаблон просто включите вышеуказанный файл тега шаблона и используйте следующее:
Теперь вы можете делать 1-6 вместо 0-6 или жестко кодировать его. Добавление шага потребует тег шаблона, это должно охватывать больше случаев использования, так что это шаг вперед.
источник
Это по существу требует
range
функции. Для этого был подан билет на функцию Django ( https://code.djangoproject.com/ticket/13088 ), но он закрыт как "не исправит" со следующим комментарием.У них есть хорошая точка зрения. Предполагается, что шаблоны являются очень простым представлением представления. Вы должны создать ограниченные требуемые данные в представлении и перейти к шаблону в контексте.
источник
Ты можешь использовать:
{% with ''|center: i as range %}
источник
Если число исходит от модели, я обнаружил, что это хороший патч для модели:
источник
Для тех, кто ищет простой ответ, просто нужно отобразить количество значений, скажем, 3 из 100 сообщений, например, просто добавьте
{% for post in posts|slice:"3" %}
и зациклите его как обычно, и будут добавлены только 3 сообщения.источник
источник