HTML/Bootstrap Можно ли отображать большую строку с числами в виде упорядоченного списка? Работа в Джанго

avatar
timrockx
1 июля 2021 в 21:09
60
1
0

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

instructions = models.TextField()

Поэтому все отображается как беспорядок, т.е.

1. Adjust the bench to an incline of 15–30 degrees. 2. Lie back on the bench with the dumbbells, and, once in position, engage your core. 3. Press the dumbbells toward the ceiling. Your palms should be facing forward. Rotate your shoulders outward to engage your lats. Your upper back should remain tight and stable throughout the entire set.

Мне интересно, есть ли способ использовать регулярное выражение или какой-либо класс начальной загрузки, чтобы переформатировать это в упорядоченный список, где он разделен отдельными шагами.

Источник

Ответы (1)

avatar
Chicodelarose
4 июля 2021 в 22:48
0

Вы можете начать с разделения instructions, используя следующее регулярное выражение: "[0-9]+\. +?", которое соответствует числу с 1 или более цифрами, за которыми следует точка и один или несколько пробелов, например, , <6319126 >, "234. " и т. д. Затем отформатируйте полученные строки, используя list-group и list-group-item начальной загрузки, чтобы создать группу списка вместе с номерами связанных элементов списка.

Следующая функция получает инструкции и регулярное выражение в качестве аргументов и возвращает строку с отдельными шагами инструкций, отформатированную как упорядоченный список для начальной загрузки.

import re

def format_instructions(instructions, regex = "[0-9]+\. +?"):
    split_by_number = re.compile(regex).split(instructions) # splits instructions into steps

    no_empty_str = filter(None, split_by_number) # removes resulting empty strings

    steps = list(map(str.strip, no_empty_str)) # removes spaces at the beginning and at the end of each step

    html = """<ul class="list-group">""" # list group begins

    for i, step in enumerate(steps):
        html += '\n    <li class="list-group-item">{}. {}</li>'.format(i + 1, step) # concatenates list group item

    html += "\n</ul>" # list group ends
    
    return html # returns formate instructions

Пример:

instructions = "1. Adjust the bench to an incline of 15–30 degrees. 2. Lie back on the bench with the dumbbells, and, once in position, engage your core. 3. Press the dumbbells toward the ceiling. Your palms should be facing forward. Rotate your shoulders outward to engage your lats. Your upper back should remain tight and stable throughout the entire set."

formatted = format_instructions(instructions)

print(formatted)

Вывод:

enter image description here

Это предполагает, что в шагах инструкции нет совпадающих строк. В противном случае регулярное выражение необходимо изменить соответствующим образом.