如何使用 for 循环解析 Django 模板(索引.html)中字典列表的元素



models.py

class Data(models.Model):
price = models.CharField(max_length=264,unique=False,blank=True,null=True)
shipping = models.CharField(max_length=264,unique=False,blank=True,null=True)
netprice = models.CharField(max_length=264,unique=False,blank=True,null=True)
points = models.CharField(max_length=264,unique=False,blank=True,null=True)
def __str__(self):
return str(self.price)

views.py

def index(request):
az_list=list(Data.objects.all())
return render(request,{'az_list':az_list,'loop':range(500)})

index.html

{% for i in loop %}
{{ az_list.i.price}}
{{ az_list.i.shipping}}
{{ az_list.i.netprice}}
{{ az_list.i.points}}
{% endfor %}

在 Django 模板中,你不能轻易获取列表的第i个元素,没有模板过滤器或模板标签。此外,这是糟糕的设计。Pythonic 迭代列表的方式是迭代列表。因此,您可以这样写:

{% forelementinaz_list%}
{{element.price}}
{{element.shipping}}
{{element.netprice}}
{{element.points}}
{% endfor %}

如果要限制要呈现的元素的 nuber,可以通过在查询中设置限制来实现,例如:

def index(request):
az_list = Data.objects.all()[:500]
return render(request, 'template.html', {'az_list': az_list})

这也将提高性能,因为现在您最多只能从数据库中获取 500 条记录,而不是先提取所有记录,然后仅呈现前 500 条记录。

编辑:如果要同时迭代多个可迭代对象,可以使用zip(..)。例如:

def index(request):
ax_list = Model1.objects.all()
ay_list = Model2.objects.all()
az_list = Model3.objects.all()
return render(
request,
'template.html',
{'all_data':zip(ax_list, az_list)}
)

然后我们可以迭代元素,例如:

{% foraxi, ayi, aziinall_data%}
{{axi.price}}
{{axi.shipping}}
{{axi.netprice}}
{{axi.points}}
{% endfor %}

这里的axiayiazi是三个列表中的元素,位于同一索引处。

最新更新