django模板变量从查询集中构建表的字段数
Posted
技术标签:
【中文标题】django模板变量从查询集中构建表的字段数【英文标题】:django template variable number of fields build of table from queryset 【发布时间】:2015-05-24 02:41:54 【问题描述】:我正在尝试根据可变数量的字段在模板中构建表格。 我使用的代码是:
<table id="custom_report_table" class="display" >
<thead>
% for field in fields %
<th> field </th>
% endfor %
</thead>
<tdody>
% for CI in CIs %
<tr>
<td> CI </td>
</tr>
% endfor %
</tdody>
</table>
fields 是一个包含所有字段的列表,CIs 是一个包含需要进入表的数据的查询集。 问题是我通常知道字段的名称,因此我可以在以通常的方式创建单元格时单独调用每个字段:
CI.field1
CI.field2
....
但现在我无法对字段名称进行硬编码,因为它们是可变的并且来自列表。
有没有办法做到这一点?
谢谢, 艾萨克
【问题讨论】:
相关:***.com/questions/2067006/… 和 ***.com/questions/2894365/…。 【参考方案1】:只需使用items
再次迭代CIs
% for key,value in CIs.items %
<td> key value</td>
%endof%
【讨论】:
抱歉,这不会打印任何内容。它没有进入循环 @isaapm 抱歉,它是CIs
,而不是CI
。
嗨,伙计们,再靠近一点。问题是我将查询集而不是字典传递给模板。我现在在视图中使用以下语法传递一个字典:'CIs': CI_table.objects.values(*report_query_values).all()[:2] 我几乎得到它,但它没有得到像以前一样的外键值,对此有什么想法吗?【参考方案2】:
如果您只想打印fields
中的项目:
% for field_name, field_value in CIs.items %
% if field_name in fields %
<th> field_name </th>
<td> field_value </td>
% endif %
%endof%
【讨论】:
谢谢,我已经从视图中得到了字段列表,所以已经涵盖了:-)【参考方案3】:通过在视图中的查询集创建中使用 .values 解决。 为了引用每个字段的外键,我必须使用 field_name_foreign_field 列表来构建值列表。 由于所有外键字段的名称都遵循标准规则,因此在视图中使用 for 循环非常容易。
【讨论】:
以上是关于django模板变量从查询集中构建表的字段数的主要内容,如果未能解决你的问题,请参考以下文章