Шаблоны 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