【问题标题】:django template variable number of fields build of table from querysetdjango模板变量从查询集中构建表的字段数
【发布时间】:2015-05-24 02:41:54
【问题描述】:

我正在尝试根据可变数量的字段在模板中构建表格。 我使用的代码是:

<table id="custom_report_table" class="display" width="100%">
          <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}}
....

但现在我无法对字段名称进行硬编码,因为它们是可变的并且来自列表。

有没有办法做到这一点?

谢谢, 艾萨克

【问题讨论】:

标签: django django-templates


【解决方案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 循环非常容易。

【讨论】:

    猜你喜欢
    • 2016-12-18
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2020-12-19
    • 2020-09-20
    • 2021-02-07
    • 2020-01-08
    • 2021-09-28
    相关资源
    最近更新 更多