首页 > 解决方案 > 重复循环

问题描述

我有一个项目,我使用嵌套的 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 %}

实际结果应该和下面的截图一样 预期结果 但是我明白了; 结果我得到 请检查图像谢谢。

标签: python-3.xdjangofor-loop

解决方案


您正在做许多不合逻辑的事情,将所有内容放在一个上下文中会更容易:

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 %}

这将对您有所帮助,您没有添加模型,所以我根据我看到的字段假设数据


推荐阅读