如何在 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)