Ошибка таблицы шаблонов django ИЛИ

Вопрос:

Поэтому у меня есть этот словарь:

[{‘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

Ответ №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 %}

добавит 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}

Оцените статью
TechArks.Ru
Добавить комментарий