Шаблоны Django - лучшая практика в избежании повторяющегося кода, требующего различных циклов For?

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

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

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

Мой первоначальный подход, в родительском файле article_list.html:

                <div class="row">
                {% block loop_start %}
                {% endblock loop_start %}
                <div class="col-xs-12 col-sm-4">
                    <div class="card">
                        <a class="img-card">
                        <img class="img-fluid"src="../../static/{{ post.featured_image }}" />
                      </a>.... etc

Я знаю, что мне нужно исправить мой src-код.

Распространяется на ребенка как:

{% block loop_start %}
{% for post in recent_articles %}
{% endblock loop_start %}

Однако это не работает, как было отмечено выше.

Я также попробовал обернуть весь код для списка статей в блок, расширить его и выполнить следующее в дочернем блоке:

    {% for post in recent_articles %}
    {% block.super article_list %}
    {% endblock article_list %}
    {% endfor %}

Это тоже не работает. Снова возникает та же ошибка, поскольку блок закрывается до завершения цикла. Я также попробовал закрыть цикл в родителе, что тоже не работает.

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

Что здесь является лучшей практикой?

Вам следует взглянуть на файл 'base.html'. Взгляните на эту веб-страницу: https://ultimatedjango.com/learn-django/lessons/create-the-project-base-template/

Это позволит вам сделать {% extends 'base.html' %}, все из которых Django будет обрабатывать.

Вернуться на верх