Числовой для цикла в шаблонах Django - PullRequest
220 голосов
/ 10 июля 2009

Как мне написать числовой цикл for в шаблоне Django? Я имею в виду что-то вроде

for i = 1 to n

Ответы [ 16 ]

6 голосов
/ 15 августа 2012

Вы должны использовать " slice " в шаблоне, например, так:

в views.py

contexts = {
    'ALL_STORES': Store.objects.all(),
}

return render_to_response('store_list.html', contexts, RequestContext(request, processors=[custom_processor]))

в store_list.html:

<ul>
{% for store in ALL_STORES|slice:":10" %}
    <li class="store_item">{{ store.name }}</li>
{% endfor %}
</ul>
4 голосов
/ 15 сентября 2016

Вы можете использовать: {% with ''|center: i as range %}

4 голосов
/ 05 сентября 2016

Я просто продолжаю популярный ответ и делаю его более надежным. Это позволяет вам указать любую начальную точку, например, 0 или 1. Он также использует функцию диапазона Python, где конец на единицу меньше, поэтому его можно использовать напрямую с длинами списка, например.

@register.filter(name='range')
def filter_range(start, end):
  return range(start, end)

Затем в свой шаблон просто включите вышеуказанный файл тега шаблона и используйте следующее:

{% for c in 1|range:6 %}
{{ c }}
{% endfor %}

Теперь вы можете делать 1-6 вместо 0-6 или жестко кодировать его. Добавление шага потребует тег шаблона, это должно охватывать больше случаев использования, так что это шаг вперед.

3 голосов
/ 27 февраля 2017

Для этого требуется функция range. Билет на функцию Django был поднят (https://code.djangoproject.com/ticket/13088) для этого, но закрыт как "не исправит" со следующим комментарием.

У меня сложилось впечатление, что эта идея пытается привести к программированию в шаблоне. Если у вас есть список параметров, которые необходимо отобразить, они должны быть рассчитаны в представлении, а не в шаблоне. Если это так просто, как диапазон значений, то пусть будет так.

У них есть хорошая точка зрения - шаблоны должны быть очень простыми представлениями представления. Вам необходимо создать ограниченные необходимые данные в представлении и перейти к шаблону в контексте.

1 голос
/ 25 июня 2018

Вы можете передать:

{'n': диапазон (n)}

Для использования шаблона:

{% для i в n%} ... {% endfor%}

0 голосов
/ 10 марта 2011

Если число исходит от модели, я обнаружил, что это хороший патч для модели:

def iterableQuantity(self):
    return range(self.quantity)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...