@TorwaldSergesson
Люблю Python и море (хотя вижу его редко)

Как красиво организовать автоматическое объединение ячеек HTML-таблицы в шаблоне?

Есть у меня набор данных (таблица в БД) следующими полями:
- ID
- Текст
- Организация

Задача - создать шаблон, который может вывести данные из этой таблицы в html-виде с одним маленьким условием, которое все портит.

Если в строке поле Текст пустое, то оно должно объединяться с полем Текст из предыдущей строки.
Если в строке поле Организация совпадает с полем Организация из предыдущей строки, то они тоже должны объединяться. Для следующего набора данных
(1, 'Foo bar', 'Org A')
(2, '', 'Org A')
(3, 'Bar', 'Org A')
(4, '', 'Org B')
(5, 'Text', 'Org B')
должна выйти вот такая таблица:
<table>
    <tr>
        <td>1</td>
        <td rowspan="2">Foo bar</td>
        <td rowspan="3">Org A</td>
    </tr>
    <tr>
        <td>2</td>
    </tr>
    <tr>
        <td>3</td>
        <td rowspan="2">Bar</td>
    </tr>
    <tr>
        <td>4</td>
        <td rowspan="2">Org B</td>
    </tr>
    <tr>
        <td>5</td>
        <td>Text</td>
    </tr>
</table>


Я это сделал, но сделал как мне кажется костыльно - применив предварительную обработку данных.
Т.е. для полей Текст и Организация я предварительно высчитываю, сколько нужно будет полей объединить и потом передаю эти данные в шаблон в виде:

Поле => {rowspan: ЧислоОбъединяемыхСтрок, Value: ЗначениеПоля}
Все это перегружает и замедляет код и затрудняет понимание логики его работы. Хотя работает он правильно.
Можно ли этого избежать, применив какие-либо особые приемы верстки или какие-нибудь ясные способы на JS?
  • Вопрос задан
  • 3252 просмотра
Пригласить эксперта
Ответы на вопрос 1
Честно говоря, не сильно вдаваясь в подробности, сразу видно что "костыль на костыле и костылем погоняет". Обратите внимание в сторону реализации получения/формирования данных: слишком сыро, чтобы начинать выводить... Обработайте как следует - верните более понятное... Слишком много манипуляций с данными уже в шаблоне, а уж JS сюда ещё...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы