Недавно я реализовал добавление target="_blank"
к внешним ссылкам следующим образом:
@hooks.register('after_edit_page')
def do_after_page_edit(request, page):
if hasattr(page, "body"):
soup = BeautifulSoup(page.body)
for a in soup.findAll('a'):
if hasattr(a, "href"):
a["target"] = "_blank"
page.body = str(soup)
page.body = page.body.replace("<html><head></head><body>", "")
page.body = page.body.replace("</body></html>", "")
page.body = page.body.replace("></embed>", "/>")
page.save()
@hooks.register('construct_whitelister_element_rules')
def whitelister_element_rules():
return {
'a': attribute_rule({'href': check_url, 'target': True}),
}
Проблемы:
Красивый суп портит вывод, добавляя теги
html, head & body
- ставить теги html, head и body автоматически, beautifulsoupЭто также мешает тегам встраивания - заставить BeautifulSoup 4 уважать самозакрывающийся тег?
Следовательно, мой дерьмовый "
fix
" вручную заменяет части вывода пустыми строками.
Вопрос:
Как правильно и лучше всего это сделать?