вторник, 20 марта 2012 г.

django: range - цикл в шаблоне

Встроенный в django шаблонный движок , как оказалось, не поддерживает циклы по диапазону значений.
Например , в шаблон передается некоторое число и необходимо организовать цикл от 0 до этого числа - 1
Средствами встроенных шаблонных тегов и фильтров сделать это , судя по всему , нельзя. Но есть простое решение : передавть в шаблон не число а значение, возвращаемое встроенной python-функцией range.

Например там, где было

...
context['num'] = Somemodel.objects.count(),
...

надо сделать

...
context['num'] = range(Somemodel.objects.count()),
...

после чего в шаблоне можно уже делать вот так:

...
{%for i in num%}
...
{%endfor%}
...

3 комментария:

  1. Можно также воспользоваться собственным фильтром.

    Создать фильтр:
    myapp/templatetags/filters.py:
    @register.filter
    def create_range(value):
    return range(value)

    И в шаблоне использовать написанный фильтр:
    myapp/template/index.html:
    {% load filters %}
    {% for i in 10|create_range %}
    ...
    {% endfor %}

    ОтветитьУдалить

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