как использовать для цикла в HTML-шаблон - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь использовать для цикла в HTML-шаблон, чтобы создать таблицу, но проблема, которую он всегда добавляет столбец за пределами таблицы, как на этом рисунке

enter image description here

Я не знаю, почему он продолжил прямо за столом (если есть только один объект, то это нормально, но когда в линейке больше 1 объекта, это радует)

что я могу сделать?

спасибо

HTML-шаблоны

<tr class="col-2">
    <th>JOUR</th>
    <th>8-10</th>
    <th>10-12</th>
    <th>12-14</th>
    <th>14-16</th>
    <th>16-18</th>
</tr>


<tr class="col-2">
    <td>SAMEDI</td>

             {% for ins in ob %}
    {%  if ins.jour = 'S' %}
    {% if ins.heur = '1' and ins.jour = 'S' %} <td>{{ins}}</td> {% else  %} <td>    </td> {% endif %}
    {% if ins.heur = '2' and ins.jour = 'S' %} <td>{{ins}}</td>{% else  %} <td>    </td> {% endif %}
    {% if ins.heur = '3' and ins.jour = 'S' %} <td>{{ins}}</td>{% else  %} <td>    </td> {% endif %}
    {% if ins.heur = '4' and ins.jour = 'S' %} <td>{{ins}}</td>{% else  %} <td>    </td> {% endif %}
    {% if ins.heur = '5' and ins.jour = 'S' %} <td>{{ins}}</td>{% else  %} <td>    </td> {% endif %}

    {% endif %}
    {% endfor %}

 {% if a != 2 %}

     <td></td>
             <td></td>
     <td></td>
     <td></td>
     <td></td>
    {% endif %}
</tr>

views.py

def tempss(request):
ob=temps.objects.all()
a=1
b=1
c=1
d=1
e=1
f=1
for ins in ob:
    if ins.jour=='S':
        a=2
    elif ins.jour=='D':
        b=2

model.py

class temps(models.Model):
JOUR_CHOICES = (
    ('S', 'Samedi'),
    ('D', 'Dimanche'),
    ('L', 'Lundi'),
    ('M', 'Mardi'),
    ('R', 'Mercredi'),
    ('J', 'Jeudi'),
    ('V', 'Vendredi'),
)
HEUR_CHOICES = (
    ('1', '8-10'),
    ('2', '10-12'),
    ('3', '12-14'),
    ('4', '14-16'),
    ('5', '16-18'),
)
jour = models.CharField(max_length=1, choices=JOUR_CHOICES)
heur = models.CharField(max_length=1,choices=HEUR_CHOICES)
salle=models.ForeignKey(salle,on_delete=models.CASCADE)
groupe=models.ForeignKey(groupe,on_delete=models.CASCADE,limit_choices_to={'any_field':False},)

1 Ответ

0 голосов
/ 23 мая 2019

Ваша петля

{% for ins in ob %}

будет отображать пустой тег данных таблицы для каждого объекта, если он не соответствует заданным вами условиям.

Эта часть избыточна, поскольку вы уже инкапсулируете с таким же условием:

and ins.jour = 'S' %}

Однако, AND имеет больше смысла, когда вы хотите создать таблицу (которая имеет фиксированное количество строк и ячеек) и вместо этого поместить условия в ячейки - я уверен, что есть более элегантное решение, но с учетом представления и модель, вот что я придумал:

<td>{% for ins in obj %}{% if ins.jour = 'S' and ins.heur = '1' %}{{ins}}
{% endif %}{% endfor %}</td>

Повторите для остальных временных интервалов соответственно. Может быть, стоит рассмотреть возможность создания значений таблицы в представлении вместо шаблона.

...