Таблица HTML в Django

294
03 декабря 2017, 11:54

Есть такой словарь:

dict = {
'columns': ['one', 'two', 'three'],
'headers': ['header1', 'header2', 'header3', 'header4'],
'data': [
    ['111', '222', '333'],
    ['111', '222', '333'],
    ['111', '222', '333'],
    ['111', '222', '333']
]}

Как с помощью тэгов HTML и языка шаблонов Django сделать именно такую таблицу?

Answer 1
dic = {
    # согласно логике, если ячейка пустая, то лучше бы об этом предупредить явно, 
    # чем надеятся что Python угадает
    'columns': [None, 'one', 'two', 'three'],
    'headers': ['header1', 'header2', 'header3', 'header4'],
    'data': [
        ['111', '222', '333'],
        ['111', '222', '333'],
        ['111', '222', '333'],
        ['111', '222', '333']
    ]
}

Преобразуем headers и data в headers[i] + data[i].
Исчерпывающее руководство по map и zip

rows = [dic['columns']] + list(map(lambda x: [x[0], *x[1]], zip(dic['headers'], dic['data'])))

Разберем по шагам эту строчку:

  1. zip(dic['headers'], dic['data']) объединяем два массива в map его вид будет [['header1', ['111', '222', '333']], ...]
  2. Создаем объект map по шаблону lambda x: [x[0], *x[1]], x[0] - это 'header1', *x[1] (звездочка впереди означает что мы передаем объекты списка, а не сам список), соответственно '111', '222', '333'.
  3. Складываем [dic['columns']] и map, (конвертируем его прежде в list)

В шаблоне указываем нашу таблицу:

<table>
    {% for row in rows %}
        <tr>
            {% for col in row %}
                <td>
                    {% if col %}{{ col }}{% endif %}
                </td>
            {% endfor %}
        </tr>
    {% endfor %}
</table>
READ ALSO
Создание html таблицы

Создание html таблицы

Я очень долго мучался и не понимаю как сделать такую таблицу :

241
Как с помощью js прописать стили в css?

Как с помощью js прописать стили в css?

Есть способ применить стили inline через внутренний объект style у DOM элементовВозможно иным способом применить стили по мимо замены класса, что...

350
Как обрезать текст только после двух первых строк?

Как обрезать текст только после двух первых строк?

Как обрезать текст только после двух первых строк, при этом ширина блока содержащего текст растягивается в зависимости от размера экранаИ...

243