使用Django和html编辑器,编码和解码文本

问题描述 投票:0回答:2

我使用编辑器Quill在Django中接收数据,数据格式为HTML。

当我推入数据库时​​,当我检索回到html时,可以编码/清理数据?如果有,怎么样?

我也只使用段落,列表和 (这是由编辑器传递的),但我想检查用户是否在代码中没有添加任何其他内容。

例如:

我从编辑那里得到:

<li>fdsafdsafdsa</li><li>fdsafdafsdafds</li>

在数据库中我想保存为(现在我另存为html):

&lt;li&gt;fdsafdsa&lt;/li&gt;&lt;li&gt;fdsafdsa&lt;/li

当我回到页面时,我会回复:

<li>fdsafdsafdsa</li><li>fdsafdafsdafds</li>
django django-templates django-database quil
2个回答
2
投票

您可以在文本字段中将html保存在数据库中。

class UserGeneratedHtml(models.Model)
    html = models.TextField()

然后在保存此数据之前,请确保它实际上是有效的html。你可以使用像BeautifulSoup这样的html解析器来做到这一点:

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

此代码段检查string.qazxsw poi中是否有任何html元素

当然,保存和提供用户生成的HTML总是很棘手,可能很危险,所以你应该总是确保html不包含可能有危险的东西。您可以使用BeautifulSoup来解析生成的html,如果它包含除段落和列表之外的任何内容,则拒绝它。

如果你想在模板中渲染用户生成的html,你可以简单地渲染它:

related answer to the snipplet above

1
投票

我终于决定使用Mozilla这样的漂白包:

{{ html |safe }}
© www.soinside.com 2019 - 2024. All rights reserved.