Django - 在模板中获取没有字段名称的元素

时间:2015-06-23 15:20:36

标签: python django django-templates django-views

我正在构建一个将成为动态表的组件。这意味着我将拥有动态列和动态数据。

到目前为止我做了什么:

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 }}如何在没有名称的情况下获取字段值?正如你所看到的,我不知道我正在迭代哪一栏......任何想法?

1 个答案:

答案 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()

(这取代了第二个内部)