我一直在为自己的一个项目创建一个小博客,只有我作为用户才能访问发布页面。我之前一直在关注 Flask 教程,该教程的最终产品使您能够使用漂白剂和 Markdown 发布 HTML 并通过 Jinja2 模板传递它。
In my models.py
文件中,这些是允许的标签。
@staticmethod
def on_changed_body(target, value, oldvalue, initiator):
allowed_tags = ['a', 'abbr', 'acronym', 'b', 'blockquote', 'code',
'em', 'i', 'li', 'ol', 'pre', 'strong', 'ul',
'h1', 'h2', 'h3', 'p', 'img', 'video', 'div', 'iframe', 'p', 'br', 'span', 'hr', 'src', 'class']
target.body_html = bleach.linkify(bleach.clean(
markdown(value, output_format='html'),
tags=allowed_tags, strip=False))
我添加了一些 img 和嵌入标签,因为这些对我的博客很重要。我有一个由一些文本和图像组成的示例帖子,它按照我编写的方式保存到(SQLAlchemy MySQL)数据库中。下面是直接从数据库中获取的。
<p>Hello</p>
<img src="https://catastrophicfindings.files.wordpress.com/2012/07/moomin-childhood-memories-260482_829_494.jpg">
<marquee>Bye</marquee>
另外,我的博客文章表单下方有一个字段,用于显示 HTML 的预览。图像按预期显示,所以我知道这很好,而且<marquee></marquee>
标签显示为标记。
在我的模板文件中,我像这样传递这个 body_html 。
{% if post.body_html %}
{{ post.body_html | safe }}
{% else %}
{{ post.body }}
{% endif %}
然后,当我在浏览器中导航到该帖子时,该图像根本不显示。然而选取框标签显示为<marquee>Bye</marquee>
,并在开发者控制台中进一步检查,<img>
标签出现在 HTML 中,只是没有“src”属性。
有没有什么办法解决这一问题?这是 Jinja 的配置中的某些内容吗?如果这是解决方案,有没有办法声明允许的属性?
谢谢。