Динамически генерировать таблицу HTML - доступ к двухмерным спискам объектов из Jinja / Flask / Python - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь создать динамический календарь (для веб-приложения для планирования сотрудников). В настоящее время используется python / flask. В настоящее время я генерирую таблицу HTML с информацией, передаваемой в шаблон jinja. Он перебирает каждую ячейку и печатает переданные данные.

Я попытался создать двумерную матрицу (которая будет представлять оси x и y в моей таблице HTML). Затем я хочу заполнить каждую «ячейку» в матрице объектом, который будет обладать любыми свойствами, которые я мог бы получить для каждой ячейки (например, идентификатор, который нужно найти при нажатии, текст для отображения, несколько других, которые я мог бы добавить)

Каждый ряд клеток заполняется циклом например,

  1. позиция [0] [0] пусто / заполнитель текста
  2. позиция [1-22] [0] последовательных дат
  3. позиция [0] [1-xxx] показывает сдвиг (от поиска в базе данных) - xxx будет зависеть от количества доступных типов сдвигов в базе данных
  4. позиция [1-22] [1] содержит объекты ячейки календаря с информацией (например, какой сотрудник выполняет смену в той же строке на дату для этого столбца

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

Я новичок и в Python, и в коде, поэтому извините, если я сделал что-то явно глупое!

Если есть лучший способ решения общей проблемы, я тоже рад это слышать.

Спасибо!

Создать матрицу таблицы:

    table_matrix = [[0 for x in range(table_columns)] for y in range(table_rows)]

Последовательные даты для строки 0: ("start_day" - просто фиктивный текст, пока я устраняю неполадки)

    for each in range(21)[1:]:  #slicing - starts from array 1 not 0
        table_matrix[0][each] = CalendarTableCell
        table_matrix[0][each].cell_text = "start_day"

Передать шаблону Jinja как table_matrix = table_matrix

Когда я делаю это (вручную назначается на "ROSTER") в jinja, это, кажется, работает нормально

    {{ table_matrix[0][0].cell_text }}

Когда я перебираю матрицу таблицы в jinja, я получаю

<class 'app.models.CalendarTableCell'>

или списки [0,0,0,0,0,0,0]

Я пробовал зацикливаться с

    {% for each in table_matrix %}
        <td>{{ table_matrix[0][each] }}</td>
    <% endfor %}

и

    {% for each in table_matrix %}
        <td>{{ table_matrix[0][each].cell_text }}</td>
    {% endfor %}

А также пробовал с

    {% for sublist in table_matrix %}
        {% for item in sublist %}
           {{ item }}
        {% endfor %}
    {% endfor %}

(а также пробовал с item.cell_text и item [0] / item [1] / item [3] ...)

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

1 Ответ

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

не должно быть table_matrix [0] [each] = CalendarTableCell () с () в конце?

Благодаря фурам (я не могу найти, где я могу подтвердить правильный ответ? Нет варианта, который я вижу)

Это было так же просто, как иметь () после CalendarTableCell - теперь работает нормально.

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