如何在 jinja (django) 中使用 for 循环显示最新的 5 个订单

Posted

技术标签:

【中文标题】如何在 jinja (django) 中使用 for 循环显示最新的 5 个订单【英文标题】:How to display latest 5 orders by using for loop in jinja (django) 【发布时间】:2021-09-30 07:25:05 【问题描述】:

下面的代码将显示所有订单,但现在我只想在模板中显示 5 个最新订单。谁能向我解释如何通过 jinja 仅迭代 5 个最新订单?

代码

<div class="card card-body">
            <table class="table table-sm">
                <tr>
                    <th>Product</th>
                    <th>Date Orderd</th>
                    <th>Status</th>
                    <th>Update</th>
                    <th>Remove</th>
                </tr>
                % for i in orders %
                    <tr>
                        <td>i.product</td>
                        <td>i.date_created</td>
                        <td>i.status</td>
                        <td><a class="btn btn-sm btn-info" href="% url 'update_order' i.id %">Update</a></td>
                        <td><a class="btn btn-sm btn-danger" href="% url 'delete_order' i.id %">Delete</a></td>
                    </tr> 
                % endfor %
            </table>
        </div>

【问题讨论】:

能否请您在views.py分享代码 【参考方案1】:

解决此问题的更好方法是从views 中的数据库中查询最后 5 个项目,并将其在上下文中传递给模板。 查询..

 last_five = TableName.objects.all().order_by('-id')[:5][::-1]

如果您仍然需要,可以使用第二个选项。 您可以使用 jinja 格式的 if 语句。仅显示最后 5 个项目。

首先,在views中按降序查询数据库中的所有对象

all_objs = TableName.objects.all().order_by('-id')

然后在 jinja 中使用 if 语句仅显示最后 5 个项目。如下。

模板

% for obj in all_objs %

   % if forloop.counter <= 5 %

       <h4>obj</h4>

   % endif %

% endfor %

【讨论】:

【参考方案2】:

您可以在 jinja 中尝试 groupby,如图所示 here 并将循环限制为 5 个计数

如果您传递包含模型数据的任何字典,来自views.py,您可以订购数据并限制订单数量,如

from your_model.models import your_model_class
def your_view(request):
    orders = your_model_class.objects.order_by('-Date Orderd')[:5]
    # used - for reverse order, and took only 5 orders using [:5]
    context = 
        'orders': orders
    
    return render(request, 'pages/index.html',context)

【讨论】:

以上是关于如何在 jinja (django) 中使用 for 循环显示最新的 5 个订单的主要内容,如果未能解决你的问题,请参考以下文章

如何在脚本中使用 django-template 而不是 jinja2?

如何在 jinja (django) 中使用 for 循环显示最新的 5 个订单

如何在 jinja2 中使用 django 中的动态变量(variable.variable.variable)

在 Django 中使用 Jinja2 MemcachedBytecodeCache

在 jinja2 中使用 django 过滤器

如何检查 jinja2/django 模板中任何变量的大小写?