Шаблон Django - новая переменная

Позвольте мне предисловие, я только начинаю Python, так что если это действительно простой вопрос ^ _ ^

У меня есть html файл со следующим содержимым:

        {%for d in results%}
        <div class="twt">
            <img src="{{ d.profile_image_url }}" width="48px" height="48px" /> <span> {{ d.text }} </span>
            <span class="date">{{ d.created_at }}</span>
        </div>
    {% endfor %}

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

Я пробовал делать:

{{ RowNumber = 0}} 
{{ RowNumber ++ }}

Но мне кажется, что я не могу объявить RowNumber.

Ответы

Ответ 1

Просмотрите документацию в цикле for.

Он автоматически создает переменную с именем forloop.counter, которая содержит текущий индекс итерации.

Что касается большего вопроса о том, как объявлять переменные, в Django нет готового способа сделать это, и это не считается отсутствующей функцией, а функцией. Если вы действительно хотели это сделать, возможно с пользовательскими тегами, но по большей части философия, которой вы хотите следовать, состоит в том, что в основном все, что вы хотите это потребует, чтобы это было сделано в представлении, и шаблон должен быть зарезервирован для очень простой логики. Например, для вашего примера суммирования можно использовать фильтр add. Аналогично, вы можете создать свои собственные фильтры точно так же, как с тегами.

Ответ 4

В шаблоне:

{% for outer_obj in outer_list %}
    {% for inner_obj in inner_list %}
         {% increment_counter forloop.counter0 forloop.parentloop.counter0 outer_list.count %}
    {% endfor %}
 {% endfor %}

Templatetag:

@register.simple_tag
def increment_counter(outer, inner, outer_loop_length):
    return outer + inner * outer_loop_length + inner * (outer_loop_length - 1)

Результат: 0 1 2 3...