Ale*_*ega 11
您可以编写自己的过滤器.该洗涤器库是在清理HTML相当不错.过滤器将需要包装返回的字符串,jinja2.Markup因此模板不会重新转义它.
编辑:一个代码示例
import jinja2
import scrubber
def sanitize_html(text):
return jinja2.Markup(scrubber.Scrubber().scrub(text))
jinja_env.filters['sanitize_html'] = sanitize_html
Run Code Online (Sandbox Code Playgroud)
Sea*_*ira 11
您将要使用白名单方法解析提交时的输入 - 此问题中有几个很好的示例和可行的选项.
完成后,您可以标记任何包含不应使用safe过滤器转义的HTML的变量:
{{comment|safe}}
Run Code Online (Sandbox Code Playgroud)
该漂白库可以做的非常好.
例如,假设变量'jinja_env'在范围内:
from bleach import clean
from markupsafe import Markup
def do_clean(text, **kw):
"""Perform clean and return a Markup object to mark the string as safe.
This prevents Jinja from re-escaping the result."""
return Markup(clean(text, **kw))
jinja_env.filters['clean'] = do_clean
Run Code Online (Sandbox Code Playgroud)
然后在模板中你可能会有类似的东西:
<p>{{ my_variable|clean(tags=['img', 'b', 'i', 'em', 'strong'], attributes={'img': ['src', 'alt', 'title', 'width', 'height']}) }}</p>
Run Code Online (Sandbox Code Playgroud)
您还可以在属性中使用可调用(而不是列表),从而允许对属性进行更彻底的验证(例如,检查src是否提供了有效的URL).文档显示了一个示例.