Шаблон Django - Объявление новой переменной - PullRequest
13 голосов
/ 05 апреля 2009

Позвольте мне предисловие, я только начинаю 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.

Ответы [ 4 ]

20 голосов
/ 05 апреля 2009

Ознакомьтесь с документацией в петле for.

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

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

7 голосов
/ 18 февраля 2011

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

3 голосов
/ 13 октября 2013

вот как это сделать:

{% with name="World" greeting="Hello" %}     
<html>
<div>{{ greeting }} {{name}}!</div>
</html>
{% endwith %}

см. Также: с тегом

от john и yarden из этого поста: Как установить значение переменной внутри кода шаблона?

2 голосов
/ 15 ноября 2011

В шаблоне:

{% 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 ...

...