У меня есть html документ, который я буду sh редактировать так, чтобы любое слово (слова) в нем можно было выделить / сделать жирным.
У меня есть html в памяти и перешел на BeautifulSoup. Я повторяю все теги и беру их строковые элементы. Если какая-либо строка содержит подходящее слово, я редактирую строку и заменяю ее на html с разметкой, обертывающей вокруг нужного слова.
from flask import Flask, Markup
from bs4 import BeautifulSoup
def match( documentText: str, searchQuery: str) -> Markup:
words = documentText.split( ' ')
if len( words) >= 3:
words[2] = f'<strong>{ words[2]}</strong>'
logger.info( f'{ words=}')
return Markup( ' '.join( words))
for link in html.find_all( True):
if ( link.string):
link.string = match( link.string, searchQuery)
app = Flask( __name__)
@app.route( '/')
def home():
logger.info( 'trying markup and testing logging')
return str( html), 200
app.run( debug=True)
Теперь вместо рендеринга страницы жирными словами, где я бы Как и они, я визуально вижу теги html, потому что если я просматриваю источник, теги на самом деле представлены >
. Похоже, что это происходит из строки "link.string = match (link.string, searchQuery)" - что, я думаю, вполне может иметь смысл, поскольку BeautifulSoup выполняет проверку типов и гарантирует единственное, что входит в тег. строковое поле действительно является строкой. Идеальным конечным состоянием, я думаю, было бы создание ответвления от тега для включения дочернего тега.
Является ли это проблемой, которую еще кто-либо ранее решал? Мое решение всей этой вещи кажется коренастым и не элегантным, поэтому я не возражаю против лучшего маршрута, если у кого-то есть такой.