Как правильно заполнить таблицу в шаблоне Django? - PullRequest
3 голосов
/ 14 октября 2019

Я хочу заполнить таблицу правильно (см. Рисунок). Но я не могу сделать это без изменения модели или использования таблиц2. Как я могу пройти через Команды и получить 1 игрока для каждой команды, а затем перейти к следующей строке за столом? Что у меня сейчас: Правильные и неправильные таблицы

models.py:

from django.db import models

class Server(models.Model):
    name = models.CharField(max_length=16)
    url = models.CharField(max_length=64)

class Team(models.Model):
    server = models.ForeignKey(Server, on_delete=models.CASCADE)
    name = models.CharField(max_length=16)
    n_players = models.IntegerField(null=True)

class Player(models.Model):
    server = models.ForeignKey(Server, on_delete=models.CASCADE)
    team = models.ForeignKey(Team, on_delete=models.CASCADE)
    name = models.CharField(max_length=16, null=True)
    highlight = models.BooleanField(default=False)

views.py:

from django.shortcuts import render
from .models import Server, Team

def index(request):
    server_list = Server.objects.order_by('name')[:3]
    context = {'server_list': server_list}

    return render(request, 'monitor/index.html', context)

индекс шаблонов. html:

{% for server in server_list %}
    <h2>{{ server.name }}</h2>
    <table>

        <tr>
        {% for team in server.team_set.all %}
            <th>
                <b>{{ team }}</b>
            </th>
        {% endfor %}
        </tr>

        {% for team in server.team_set.all %}
            <tr>
                {% for player in team.player_set.all %}

                    <td>{{ player }}</td>

                {% endfor %}
            </tr>
        {% endfor %}

    </table>    
{% endfor %}

Обновлено (10-30-19) : я попытался создать еще один список из текущих классов в views.py. Но я не мог сделать это правильно. И теперь я сделал другое решение для этого. В views.py я добавил:

context['range_1_7'] = range(1, 7)

Это позволяет мне пройти цикл 6 раз (потому что 6 - максимальное количество игроков в команде). И выводите столбцы и строки, подобные этой (шаблоны):

{% for row in range_1_7 %}
                <tr>
                    {% for team in server.team_set.all %}
                        {% with team.player_set.all as player_list %}
                            <td>
                                {% if row == 1 %}
                                    {{ player_list.0.name }}
                                {% elif row == 2 %}
                                    {{ player_list.1.name }}
                                {% elif row == 3 %}
                                    {{ player_list.2.name }}
                                {% elif row == 4 %}
                                    {{ player_list.3.name }}
                                {% elif row == 5 %}
                                    {{ player_list.4.name }}
                                {% elif row == 6 %}
                                    {{ player_list.5.name }}
                                {% endif %}
                            </td>
                        {% endwith %}
                    {% endfor %}
                </tr>
{% endfor %}

Конечно, это может показаться плохим решением, но оно работает. Было бы неплохо выяснить, как использовать переменную в переменной в шаблоне django следующим образом:

{{ player_list.{{ row-1 }}.name }}

В этом случае можно было бы удалить многострочный оператор IF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...