我正在尝试创建一个将项目放在表格中的模板。
控制器:
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
的长度。
我该怎么做?
答案 0 :(得分: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)
所以模板所要做的就是循环遍历每个“item”(这只是一个显示对应于标题的值的列表。基本上,这将从模板中移动逻辑(决定显示什么) (或者实际上在模板和视图中分别进行了一些拆分)完全依赖于视图中的Python代码,简化模板并使其更加通用,如您所愿。
答案 1 :(得分:1)
我不确定是否有现成的模板标签/过滤器可以完成您想要的任务。您可以考虑编写一个自定义模板标记或过滤器,它接受项目列表和当前标题,并在查找后返回值。看看http://docs.djangoproject.com/en/dev/howto/custom-template-tags/。