#python-3.x #django #for-loop
#python-3.x #django #for-цикл
Вопрос:
У меня есть проект, в котором я использую вложенный цикл for для фильтрации элементов, но результат продолжает повторять элемент, который не должен быть таким. Пожалуйста, где я ошибся?
def order_list(request):
orders = Order.objects.all()
current_user = request.user
user_list = orders.filter(user=current_user.id)
success = orders.filter(paid=True)
fail = orders.filter(paid=False)
return render(request, 'orders/order/order_list.html', {
'orders': orders,
'success': success,
'fail': fail,
'user_list':user_list,
'current_user':current_user,
})
HTML
{% for ls in orders %}
{% for x in user_list %}
{% for od in success %}
<div class="card mb-3" style="max-width: 540px;">
<div class="row no-gutters">
<div class="col-md-3">
<img alt="product img" class="card-img" src="...">
</div>
<div class="col-md-9">
<div class="card-body" style="position: relative;">
<h5 class="card-title">Product {{ od.id }}</h5>
<a href="#" style="position: absolute; top: 5px; right: 5px;">View
Details</a>
<p class="card-text">Transaction ID</p>
<p class="card-text"><small class="text-muted">Delivered at
{{od.reference_id}}</small></p>
</div>
</div>
</div>
</div>
{% endfor %}
{% endfor %}
{% endfor %}
фактический результат должен быть таким, как на скриншоте ниже
Но я понимаю это;
Пожалуйста, проверьте изображения
Спасибо.
Комментарии:
1. это потому, что они выполняют итерацию для каждой итерации, вы повторяете все каждый ход for
Ответ №1:
вы делаете много нелогичных вещей, проще поместить все в один контекст:
def order_list(request):
template_name = 'orders/order/order_list.html'
user = request.user
orders = Order.objects.filter(user=user).filter(paid=True)
return render(request, template_name, {
'orders': orders
})
и ваш шаблон будет выглядеть так:
{% for order in orders %}
<div class="card mb-3" style="max-width: 540px;">
<div class="row no-gutters">
<div class="col-md-3">
<img alt="product img" class="card-img" src="...">
</div>
<div class="col-md-9">
<div class="card-body" style="position: relative;">
<h5 class="card-title">Product {{ order }}</h5>
<a href="#" style="position: absolute; top: 5px; right: 5px;">View
Details</a>
<p class="card-text">Transaction ID</p>
<p class="card-text"><small class="text-muted">Delivered at
{{ order.reference }}</small></p>
</div>
</div>
</div>
</div>
{% endfor %}
Это поможет вам, вы не добавили свои модели, поэтому я принял данные в соответствии с полями, которые я видел
Комментарии:
1. Большое спасибо за просвещение. Это сработало 🙂