Вы можете сохранить HTML в вашей базе данных в текстовом поле.
class UserGeneratedHtml(models.Model)
html = models.TextField()
Затем перед сохранением этих данных убедитесь, что они действительно являются действительными html.Вы можете сделать это с помощью html-парсера, например BeautifulSoup:
from bs4 import BeautifulSoup
html = """<html>
<head><title>I'm title</title></head>
</html>"""
non_html = "This is not an html"
bool(BeautifulSoup(html, "html.parser").find())
True
bool(BeautifulSoup(non_html, "html.parser").find())
False
Этот фрагмент кода проверяет, есть ли какой-либо html-элемент внутри строки. связанный с ответом фрагмент выше
Конечно, сохранение и обслуживание созданного пользователем html всегда сложно и, возможно, опасно, поэтому вы всегда должны убедиться, что html не содержит потенциально опасных вещей.Вы можете использовать BeautifulSoup для анализа сгенерированного html и, если он содержит что-то кроме абзацев и списков, отклоните его
Если вы хотите отобразить сгенерированный пользователем html в шаблоне, вы можете просто отобразить его так:
{{ html |safe }}