Динамически условно форматирующий текст - если слово в списке - PullRequest
1 голос
/ 12 мая 2019

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

Допустим, мои две переменные такие, как показано ниже

text = "Stephen went to the park on Tuesday with Sarah.
        Stephen couldn't go to my birthday party."

list=['Stephen', 'Sarah', 'Tuesday']

желаемый вывод html: Стивен пошел в парк во вторник с Сарой . Стивен не смог пойти на мой день рождения.

Я озадачен тем, как подойти к такой проблеме, любая помощь или направление будут высоко оценены.

Edit: Код Python

return render_template('results.html', ctext=boldened_text)

HTML-код

<h6>Your Text was</h6>
<div class="alert alert-info" role="alert"><p>{{ctext}}</p></div>

Ответы [ 2 ]

1 голос
/ 12 мая 2019

Для более точного управления я бы посоветовал использовать цикл for (в этом примере это упрощено как понимание списка):

text = "Stephen went to the park on Tuesday with Sarah. Stephen couldn't go to my birthday party."

filter_list = ['Stephen', 'Sarah', 'Tuesday']

boldened = " ".join(["<b>{}</b>".format(word) if word.strip() in filter_list else word for word in text.split(" ")])

Чтобы увидеть, что используют эти выходы:

print(boldened)

Ожидаемый результат:

"<b>Stephen</b> went to the park on <b>Tuesday</b> with Sarah. <b>Stephen</b> couldn't go to my birthday party."

ПРИМЕЧАНИЕ: помните, что в Python list - это тип, не используйте его в качестве идентификатора для переменных.

Кроме того, вы получаете теги <b>, напечатанные в виде простого текста, поскольку вы не отображаете переменную ctext в виде HTML, вместо этого напишите:

{{ ctext | safe }}

ПРЕДУПРЕЖДЕНИЕ: используйте safe только с теми строками, в которых вы абсолютно уверены, действительно безопасны !

Удачи.

1 голос
/ 12 мая 2019
# Loop over all words
for word in list:
  # replace the word by bold tags with the word in between
  text = text.replace(word, '<b>%s</b>' % word)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...