【问题标题】:django template table trouble ORdjango模板表麻烦或
【发布时间】:2014-07-21 14:06:11
【问题描述】:

所以我有这本字典:

[{'name': 'Strom', 'jahr': 2014, 'summe': 1258.0}, {'name': 'Strom', 'jahr': 2013, 'summe': 0}, {' name':'Strom','jahr':2012,'summe':0},{'name':'Erdgas','jahr':2014,'summe':1425.7485714285715},{'name':'Erdgas' , 'jahr': 2013, 'summe': 0}, {'name': 'Erdgas', 'jahr': 2012, 'summe': 0}]

我想把它放到一张桌子上:

Energy        2014      2013     2012

Strom         1258         0        0

Erdgas        1425.74      0        0

将始终显示 3 年,但可能超过 2 行。

我不太擅长 CSS 和 HTML,所以它主要是尝试和错误,这是我目前的 html 文件:

   {% extends 'base.html' %}
   {% load verbrauchererfassung_tags %}
   {% block content %}
   {{Verbrauch}}
    <h1 class="page-header">Verbraucheranzeige</h1>
    <div class="table-responsive">
    <table class="table table-striped">
     <thead>
        <tr>
          <th>Energieträger</th>
          {% for y in Years %}
          <th>{{ y }}</th>
          {% endfor %}
        </tr>
      </thead>
    <tbody>
    {% for v in Verbrauch %}
    {% if forloop.counter0|divisibleby:3 %}
     <tr>
    <td>{{v.name}}</td>

    {% endif %}

    {% for verbrauch in Verbrauch %}
    <td>{{verbrauch.summe}} </td>
    {% if forloop.counter|divisibleby:3 or forloop.last%}</tr>{% endif %}
    {% endfor %}
    {% endfor %}
    </table>

    {% endblock %}

看起来像这样:

Energieträger   2014    2013    2012
Strom           1258,0     0       0
1425,7485714285715  0    0
1258,0  0   0
1425,7485714285715  0   0
1258,0  0   0
1425,7485714285715  0   0
Erdgas          1258,0  0   0
1425,7485714285715  0   0
1258,0  0   0
1425,7485714285715  0   0
1258,0  0   0
1425,7485714285715  0   0 

是的,这让我发疯,我想我可能在这里走错路了,你们能帮帮我吗?

编辑:

所以在休息了很长时间后,我决定这样订购我的字典:

[{'name': 'Strom', 2: 2013.0, 3: 2012.0, 1: 1258.0}, {'name': 'Erdgas', 2: 0, 3: 0, 1: 1425.7485714285715}] 

这导致了一个模板:

{% extends 'base.html' %}
{% load verbrauchererfassung_tags %}
{% block content %}
{{Verbrauch}}
    <h1 class="page-header">Verbraucheranzeige</h1>
    <div class="table-responsive">
    <table class="table table-striped">
     <thead>
        <tr>
          <th>Energieträger</th>
          {% for y in Years %}
          <th>{{ y }}</th>
          {% endfor %}
        </tr>
      </thead>
    <tbody>

    {% for v in Verbrauch %}
    {% if forloop.counter0|divisibleby:3 %}
     <tr>
    {% endif %}
    <td>{{v.name}}</td>
    <td>{{v.1}}</td>
    <td>{{v.2}}</td>
    <td>{{v.3}}</td>
    {% if forloop.counter0|divisibleby:"3" or forloop.last%}</tr>{% endif %}
    {% endfor %}


    </table>

{% endblock %}

还有这张漂亮的桌子(我根据年份做了数值,所以我可以看看我的顺序是否正确)

Energietraeger  2014    2013    2012
Strom           1258,0  2013,0  2012,0
Erdgas         1425,74     0    0

【问题讨论】:

  • 这里:{% if forloop.counter0|divisibleby:3 %}&lt;tr&gt; - 移动endif 之前 td

标签: django templates python-3.x


【解决方案1】:

我认为您可能会遇到问题,因为您的代码:

 {% if forloop.counter0|divisibleby:3 %}
     <tr>
 {% endif %}
    <td>{{v.name}}</td>
    <td>{{v.1}}</td>
    <td>{{v.2}}</td>
    <td>{{v.3}}</td>
{% if forloop.counter0|divisibleby:"3" or forloop.last%}</tr>{% endif %}
{% endfor %}

将每 3 个循环和最后一个循环之后添加一个 tr,这不再是您想要的。所以我认为你的 html 看起来像:

    <tr>
    <td>Strom</td>
    <td> 1258,0</td>
    <td> 2013,0</td>
    <td> 2012,0</td>
    </tr>
    <td>Erdgas</td>
    <td> 1425,74</td>
    <td> 0</td>
    <td> 0</td>
    </tr>

所以对于两个它可能会正确显示,但正如您在Erdgas 之前看到的那样,缺少&lt;tr&gt;

正确的解决方案是:

{% for v in Verbrauch %}

<tr>
<td>{{v.name}}</td>
<td>{{v.1}}</td>
<td>{{v.2}}</td>
<td>{{v.3}}</td>
</tr>
{% endfor %}

您的循环遍历具有正确字段数(名称、1、2、3)的列表元素,因此您不需要进行一些除法测试。而且您必须为循环中的每个元素添加新的表格行。

在您的示例中,forloop 将从 0 运行到 1,因为您必须在列表中添加元素

第一个元素:{'name': 'Strom', 2: 2013.0, 3: 2012.0, 1: 1258.0}

第二个元素:{'name': 'Erdgas', 2: 0, 3: 0, 1: 1425.7485714285715}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 2018-07-04
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2020-02-12
    相关资源
    最近更新 更多