Как сделать петлю в шаблоне Django? - PullRequest
0 голосов
/ 03 июня 2011

Я знаю, как сделать forloop, чтобы получить объекты из списка, но здесь я говорю о forloop, чтобы повторить что-то определенное количество раз.Как, например, в PHP, я бы сделал:

for (i=0; i < 10; i++) {

   hello <br />

}

Это будет выводить привет 10 раз.Так как же сделать это на языке шаблонов Django?

Ответы [ 3 ]

10 голосов
/ 03 июня 2011

Язык шаблонов Django имеет циклы For.См .:

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#for

.... Вы можете заметить, что нет четкого представления о том типе «повторения», который вам нужен.Например, вы можете определить int в вашем представлении (i в вашем случае) и передать его диапазон в контекст шаблона, а затем выполнить итерацию по диапазону этого int (конечно, в Python объекты int сами по себе не повторяются).

Однако более «питонический» подход должен быть явным: спросите себя: «Почему я хочу повторить десять раз?»Это количество кокосов, отображаемых на этой странице о храброй ласточке, которая их несла?Если это так, не перебирайте число 10 - вместо этого перебирайте непосредственно список кокосовых объектов и выполняйте логику представления прямо в forloop.

{% for coconut in coconuts %}
    hello, {{forloop.counter}} {# Something useful about the coconut goes here. #}
{% endfor %}

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

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

http://djangosnippets.org/snippets/1899/

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

2 голосов
/ 03 июня 2011

Вы можете использовать пользовательский фильтр , чтобы сделать это легко:

from django.template import Library
register = Library()

@register.filter
def range(value):
    return xrange(value)

Тогда в вашем шаблоне:

{% for i in 10|range %}
    hello <br/>
{% endfor %}
0 голосов
/ 03 июня 2011

Этого можно достичь, внедрив собственный шаблонный тег для повторения определенных блоков.Взгляните на официальную документацию по адресу https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

. Таким образом, вы можете использовать ее, написав:

{% repeat 3 %}
   <div>html to repeat</div>
{% endrepeat %}

Это старый фрагмент 2009 года, который выполняет все вышеперечисленное, может потребоватьсяобновление для работы с Django 1.3, хотя, но должно быть достаточно для начала работы: http://djangosnippets.org/snippets/1499/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...