Шаблоны Django позволяют избежать зацикливания

Я работаю над проектом и немного запутался.

Шаблон Djago index.html имеет следующий код:

  <div class="carousel-item active">
      {% for i in products|slice:"0:"%}
        <div class="col-xs-3 col-sm-3 col-md-3">
          <div class="card" style="width: 17rem;">
              <div class="card-body">
              {% for img in i.images.all %}
                  {% if forloop.counter == 1 %}
                  <img src={{img.img_url}} class="card-img-top" alt="...">
                  {% endif %}
               {% endfor %}

                <h6 class="card-title">{{i}}</h6>
                   {% for skus in i.skus.all %}
                                        {% if forloop.counter == 1 %}
                  <h6 class="card-price">{{skus.price}} {{skus.currency}}</h6>
                                        {% endif %}
               {% endfor %}
                <a href="#" class="btn btn-primary">Add to Cart </a>
            </div>
          </div>
        </div>
        {% endfor %}
      </div>

В этом коде есть способ устранить {% for skus in i.skus.all %}

Тег all получает все объекты, но я ограничиваю цикл только одним запуском через условие if, так что я могу получить только первый элемент.

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

Вы ищете метод first queryset ?

<div class="card-body">
  <img src={{i.images.first().img_url}} class="card-img-top" alt="...">
</div>

Вы можете достичь этого, используя либо тег with для установки переменной, либо директивы, как:

{% with skus=i.skus.first %}
    <h6 class="card-price">{{skus.price}} {{skus.currency}}</h6
{% endwith %}

или

<h6 class="card-price">{{i.skus.first.price}} {{i.skus.first.currency}}</h6
Вернуться на верх