Django:使用变量作为数组索引?
我正在尝试创建一个模板,用来把一些项目放到一个表格里。
控制器:
items = Item.all().order('name').fetch(10)
template_values = {'items': items,
'headers': ['Name', 'Price', 'Quantity']}
render('Views/table.html', self, template_values)
模板:
<table>
<tr>
{% for header in headers %}
<th>{{header}}</th>
{% endfor %}
</tr>
{% for item in items %}
<tr><td><a href="detail/{{item.CSIN}}">{{item.name}}</a></td><td>{{item.CSIN}}</td></tr>
{% endfor %}
</table>
现在,这个模板是死死地写死的,只能查找item
的某些属性。我想把这个改成,要么根据headers
里的名字去查找属性,要么根据前n个属性查找,其中n是headers
的长度。
我该怎么做呢?
2 个回答
1
我不太确定有没有现成的模板标签或过滤器可以满足你的需求。你可以考虑自己写一个自定义的模板标签或过滤器,它可以接收一个项目列表和当前的标题,然后返回查找后的值。你可以看看这个链接:http://docs.djangoproject.com/en/dev/howto/custom-template-tags/。
2
你可以调整视图来做到:
items = Item.all().order('name').fetch(10)
headers = ['Name', 'Price', 'Quantity']
viewitems = [[getattr(x, h) for h in headers] for x in items]
template_values = {'items': viewitems,
'headers': headers}
render('Views/table.html', self, template_values)
这样模板只需要遍历每一个“项目”(这些项目就是要显示的值的列表,和表头对应)。基本上,这样做是把决定显示什么的逻辑(也就是选择内容的部分)从模板中移到Python代码里,或者说在模板和视图中各分一部分。这样可以简化模板,让它变得更通用,正如你所希望的那样。