|
Table of contents
|
Как мы уже говорили ранее, шаблонная система поставляется со встроенными тегами и фильтрами. Следующие разделы описывают основные теги и шаблоны. Тег {% if %} вычисляет переменную и если результатом вычисления является True (т.е., она существует, не пустая и не равна False), система отображает всё между {% if %} и {% endif %}, например: {% if today_is_weekend %}
<p>Welcome to the weekend!</p>
{% endif %}
Тег {% else %} является необязательным: {% if today_is_weekend %}
<p>Welcome to the weekend!</p>
{% else %}
<p>Get back to work.</p>
{% endif %}
«Истина» в Python
В Python и в шаблонной системе Django нижеприведённые
объекты вычисляются в False в контексте
Всё остальное вычисляется в True.
Тег {% if %} принимает and, or или not для тестирования множества переменных или инвертирования. Например: {% if athlete_list and coach_list %}
Both athletes and coaches are available.
{% endif %}
{% if not athlete_list %}
There are no athletes.
{% endif %}
{% if athlete_list or coach_list %}
There are some athletes or some coaches.
{% endif %}
{% if not athlete_list or coach_list %}
There are no athletes or there are some coaches.
{% endif %}
{% if athlete_list and not coach_list %}
There are some athletes and absolutely no coaches.
{% endif %}
Теги {% if %} не позволяют объединять and и or в одном теге, потому что порядок логики будет двусмысленным. Пример с ошибкой: {% if athlete_list and coach_list or cheerleader_list %}
Использование скобок для управления порядком операций не поддерживается. Если вам потребуются скобки, рассмотрите применение логики вне шаблона и передачу результата вычисления в виде выделенной шаблонной переменной. Или просто используйте вложенные теги {% if %}, например: {% if athlete_list %}
{% if coach_list or cheerleader_list %}
We have athletes, and either coaches or cheerleaders!
{% endif %}
{% endif %}
Допускается множественное использование одного и того же логического оператора, но вы не можете объединять различные операторы. Вот правильное использование: {% if athlete_list or coach_list or parent_list or teacher_list %}
Тега {% elif %} не существует. Используйте вложенные теги {% if %} для решения такой задачи: {% if athlete_list %}
<p>Here are the athletes: {{ athlete_list }}.</p>
{% else %}
<p>No athletes are available.</p>
{% if coach_list %}
<p>Here are the coaches: {{ coach_list }}.</p>
{% endif %}
{% endif %}
Не забывайте закрывать каждый тег {% if %} с
помощью {% endif %}. В противном случае
Django будет вызывать исключение
Тег {% for %} позволяет обработать каждый элемент последовательности. Аналогично оператору for языка Python, синтаксис таков for X in Y, где Y — это последовательность, а X — это имя переменной, в которую помещается значение текущего элемента. На каждом шагу цикла, шаблонная система выводит всё, что находится между тегами {% for %} и {% endfor %}.
Например, вы можете использовать следующий пример для
отображения списка атлетов, который находится в
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
Добавьте reversed к тегу для обработки списка в обратном порядке: {% for athlete in athlete_list reversed %}
...
{% endfor %}
Теги {% for %} можно вкладывать друг в друга: {% for athlete in athlete_list %}
<h1>{{ athlete.name }}</h1>
<ul>
{% for sport in athlete.sports_played %}
<li>{{ sport }}</li>
{% endfor %}
</ul>
{% endfor %}
Ниже показан стандартный способ проверки размера списка перед итерацией по его элементам или вывода отдельного сообщения, в случае пустого списка: {% if athlete_list %}
{% for athlete in athlete_list %}
<p>{{ athlete.name }}</p>
{% endfor %}
{% else %}
<p>There are no athletes. Only computer programmers.</p>
{% endif %}
Так как этот способ часто употребляется на практике, тег {% for %} поддерживает необязательный оператор {% empty %}, который позволяет выводить сообщение, в случае пустого списка. Этот пример эквивалентен предыдущему: {% for athlete in athlete_list %}
<p>{{ athlete.name }}</p>
{% empty %}
<p>There are no athletes. Only computer programmers.</p>
{% endfor %}
Нет стандартной возможности прекратить цикл до окончания обработки списка. Если вам надо это сделать, создайте переменную, которая будет содержать список только с теми значениями, которые нужны. Аналогично, нет поддержки оператора continue, который бы позволил перейти к обработке следующего элемента списка. (Обратитесь к разделу «Философия и ограничения» для описания причин, которые привели к такому поведению тега.)
Во время каждой итерации {% for %} вы
получаете доступ к шаблонной переменной
Эта волшебная переменная
Контекст и переменная |
Found misprint?
Select it with the mouse and hit Enter
-
Processed:
33
1
199
25
The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!
We are glad to hear your questions, comments or suggestions!
(Open in new tab)
Users number: 601
Русская группа
Ускорить процесс перевода!
ЯМ:41001223475816
|
| © 2008-2012 Ruslan Popov @ gmail.com | Powered by Django 1.2.5 |
forloop.revcounter0 аналогичен атрибуту forloop.revcounter, только отсчёт начинается с нуля.
Думаю правильно будет так:
forloop.revcounter0 аналогичен атрибуту forloop.revcounter, только отсчёт закончится нулем.