использовать Python для динамического создания HTML-сетки для строк и столбцов - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь создать сетку строк и столбцов, используя python.Основным является то, что для первого элемента в списке userName я должен создать <div class="row">, а в идеале каждую четвертую итерацию цикла, я должен закрывать эту строку другим div.

Часть, которая немного обманывает меня, - это, если в списке, скажем, меньше 4 элементов, чем мне, тем не менее, мне нужно будет правильно закрыть строку с другим div, если в списке только 3 элемента.или 2 элемента в списке.

Надеюсь, я объяснил это достаточно хорошо, пожалуйста, задайте вопрос, и я объясню, что я имею в виду.

    # userName = ['Name1', 'Name2']
    userName = ['Name1', 'Name2', 'Name3', 'Name4', 'Name5', 'Name6', 'Name7', 'Name8']
    # userName = ['Name1', 'Name2', 'Name3']

    html_card = ''
    for count, element in enumerate(userName, 1): # Start counting from 1

        # ADDING HTML ROW
        if count % 4 == 0 or count == 1:
            html_card += '<div class="row">'

        # ADDING HTML CARD COL
        html_card += '''\n<div class="col">
                        <div class="card card-block">
                          <div class="card mb-4 border-primary">
                                <div class="card-header bg-primary">{element}</div>
                                <div class="card-body text-primary">
                                  <h4 style="color:#0069d9" class="card-title">{element} Performance Runs</h4>
                                  <p style="color:#0069d9" class="card-text"></p>
                                  <button type="button" class="btn btn-primary" value="Show Div" onclick="showDiv()">Available Runs</button>
                                </div>
                             </div>
                        </div>
                    </div>\n'''.format(element=element)

        # ADDING HTML ROW DIV
        if count % 4 == 0 or element == userName[-1]:
            html_card += '</div>\n'

        print(html_card)

1 Ответ

0 голосов
/ 07 декабря 2018

Если я правильно понимаю, вы хотите напечатать элементы userName в строках по 4. Если последняя строка не заполнена, просто завершите строку в любом случае, например так:

| 1 | 2 | 3 | 4 |
| 5 | 6 | 7 |

ДляДля облегчения демонстрации в следующем коде я сократил HTML посередине, но он все равно должен работать.Здесь мы можем позволить Python отслеживать работу позиций, используя срезы массива (то есть, если x = [1,2,3,4], то x[0:2] равно [1,2], поскольку x[a,b] означает подсписок x, начинающийся с индексаa и продолжение для b элементов).

Таким образом, мы можем выполнить цикл по набору нужных нам строк и вырезать значения столбцов следующим образом:

userName = ['Name1', 'Name2', 'Name3', 'Name4', 'Name5', 'Name6', 'Name7']

row_length = 4
html_card = ''
for i in range(0, len(userName), row_length):
    html_card += '<div class="row">'
    for element in userName[i:i+row_length]:
        html_card += '\n<div class="col">{element </div>\n'.format(element=element)
    html_card += '</div>\n'

print(html_card)

Itбыло намного легче увидеть, что происходит в коде, упрощая HTML.Один из способов сделать это - создать строку вне цикла, которую можно использовать в качестве шаблона с вызовом формата.

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