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 %}
答案 0 :(得分:1)
在Django模板中,如果没有模板过滤器或模板标记,就无法轻松获取列表的第 i 个元素。此外,这是糟糕的设计。遍历列表的Python方式是遍历列表。您可以这样写:
{% for element in az_list %}
{{ element.price}}
{{ element.shipping}}
{{ element.netprice}}
{{ element.points}}
{% endfor %}
如果您想限制要渲染的元素数量,可以通过在查询中设置一个限制来实现,例如:
def index(request):
az_list = Data.objects.all()[:500]
return render(request, 'template.html', {'az_list': az_list})
这还将提高性能,因为现在您最多只能从数据库中获取500条记录,而不是首先获取 all 条记录,然后仅呈现前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)}
)
然后我们可以遍历以下元素:
{% for axi, ayi, azi in all_data %}
{{ axi.price}}
{{ axi.shipping}}
{{ axi.netprice}}
{{ axi.points}}
{% endfor %}
此处axi
,ayi
和azi
是三个列表中位于 same 索引处的元素。