Поэтому у меня есть этот словарь:
[{‘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 %}
<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 %}
добавит tr каждые 3 цикла и после последнего цикла, который больше не то, что вы хотите. Поэтому я думаю, что ваш 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
отсутствует <tr>
.
Правильное решение будет:
{% 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, потому что у вас есть элементы в списке
1-й элемент: {‘name’: ‘Strom’, 2: 2013.0, 3: 2012.0, 1:1258.0}
2-й элемент: {‘name’: ‘Erdgas’, 2: 0, 3: 0, 1:1425.7485714285715}