django - 模板中的列表列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django - 模板中的列表列表相关的知识,希望对你有一定的参考价值。
我试图渲染一个用zip()
压缩的列表列表。
list_of_list = zip(location,rating,images)
我想将此list_of_list
渲染为模板,并希望仅显示每个位置的第一张图像。
我的位置和图像模型是这些:
class Location(models.Model):
locationname = models.CharField
class Image(models.Model):
of_location = ForeignKey(Location,related_name="locs_image")
img = models.ImageField(upload_to=".",default='')
这是压缩列表。如何仅访问模板中每个位置的第一张图像?
答案
将list_of_lists
传递给RequestContext。然后,您可以在模板中引用images
列表的第一个索引:
{% for location, rating, images in list_of_lists %}
...
<img>{{ images.0 }}</img>
...
{% endfor %}
另一答案
我想你应该看看django-multiforloop。
另一答案
您也可以根据类型处理模板中的列表元素(使用Django 1.11)。
所以如果你有你描述的观点:
# view.py
# ...
list_of_lists = zip(location,rating,images)
context['list_of_lists'] = list_of_lists
# ...
您需要做的就是创建一个标签来确定模板中元素的类型:
# tags.py
from django import template
register = template.Library()
@register.filter
def get_type(value):
return type(value).__name__
然后,您可以检测列表元素的内容类型,并且只有列表元素本身是列表时才显示第一个元素:
{% load tags %}
{# ...other things #}
<thead>
<tr>
<th>locationname</th>
<th>rating</th>
<th>images</th>
</tr>
</thead>
<tbody>
<tr>
{% for a_list in list_of_lists %}
{% for an_el in a_list %}
<td>
{# if it is a list only take the first element #}
{% if an_el|get_type == 'list' %}
{{ an_el.0 }}
{% else %}
{{ an_el }}
{% endif %}
</td>
{% endfor %}
</tr>
% endfor %}
</tbody>
以上是关于django - 模板中的列表列表的主要内容,如果未能解决你的问题,请参考以下文章