我正在构建一个将成为动态表的组件。这意味着我将拥有动态列和动态数据。
到目前为止我做了什么:
fields = [(f.verbose_name, f.name) for f in Car._meta.fields]
data = Car.objects.all()
context['fields'] = fields
context['data'] = data
在我的django模板里面是这样的:
<table class="table">
<tr>
<th></th>
{% for field in fields %}
<th>{{ field.0 }}</th>
{% endfor %}
</tr>
{% for value in data%}
<tr>
<td><input type="checkbox"></td>
{% for field in fields %}
<td>{{ value }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
我的标签{{ value }}
如何在没有名称的情况下获取字段值?正如你所看到的,我不知道我正在迭代哪一栏......任何想法?
答案 0 :(得分:0)
在django模板中无法执行此操作(使用动态名称获取字段)。您需要在python中准备数据,以便在模板中有一个与列匹配的字段值列表。最简单的方法是使用values_list queryset方法:
fn chunk<T, U>(data: U) -> Vec<U>
where U: IntoIterator<Item=T>,
U: FromIterator<T>,
<U as IntoIterator>::IntoIter: ExactSizeIterator
{
let cpu_count = 6 /*num_cpus::get()*/;
let mut iter = data.into_iter();
let iter = iter.by_ref();
let chunk_len = (iter.len() / cpu_count) as usize + 1;
let mut chunks = Vec::new();
for _ in 0..cpu_count {
chunks.push(iter.take(chunk_len).collect())
}
chunks
}
然后只需迭代模板中的列表(您可能希望在此处更改变量名称):
data = Car.objects.values_list()
(这取代了第二个内部)