Python 使用Flask/Jinja2将HTML传递到模板
我正在为Flask和SQLAlchemy构建一个管理员,我想使用Python 使用Flask/Jinja2将HTML传递到模板,python,jinja2,flask,Python,Jinja2,Flask,我正在为Flask和SQLAlchemy构建一个管理员,我想使用render\u template将不同输入的HTML传递给我的视图。模板框架似乎自动转义HTML,因此所有要在呈现值时关闭自动转义,请使用|safe过滤器 {{something | safe}} 仅对您信任的数据执行此操作,因为在不转义的情况下呈现不受信任的数据是一个跨站点脚本漏洞。要在呈现值时关闭自动转义,请使用|safe过滤器 {{something | safe}} 仅对您信任的数据执行此操作,因为在不转义的情况下呈现
render\u template
将不同输入的HTML传递给我的视图。模板框架似乎自动转义HTML,因此所有要在呈现值时关闭自动转义,请使用|safe
过滤器
{{something | safe}}
仅对您信任的数据执行此操作,因为在不转义的情况下呈现不受信任的数据是一个跨站点脚本漏洞。要在呈现值时关闭自动转义,请使用|safe
过滤器
{{something | safe}}
仅对您信任的数据执行此操作,因为在不转义的情况下呈现不受信任的数据是一个跨站点脚本漏洞。提供了Jinja的自动转义行为。您可以导入标记
,并使用它从代码中声明HTML安全值:
from markupsafe import Markup
value = Markup('<strong>The HTML String</strong>')
从markupsafe导入标记
value=标记(“HTML字符串”)
将其传递到模板,您不必在其上使用|safe
过滤器。提供了Jinja的自动转义行为。您可以导入标记
,并使用它从代码中声明HTML安全值:
from markupsafe import Markup
value = Markup('<strong>The HTML String</strong>')
从markupsafe导入标记
value=标记(“HTML字符串”)
将其传递到模板,您不必在其上使用|safe
过滤器。来自Jinja文档部分:
启用自动转义时,默认情况下会转义所有内容
但明确标记为安全的值除外。这些可以是
由应用程序标记或在模板中使用|safe
过滤器
例如:
<div class="info">
{{data.email_content|safe}}
</div>
{{data.email{u content}安全}
来自Jinja文档部分:
启用自动转义时,默认情况下会转义所有内容
但明确标记为安全的值除外。这些可以是
由应用程序标记或在模板中使用|safe
过滤器
例如:
<div class="info">
{{data.email_content|safe}}
</div>
{{data.email{u content}安全}
当您有许多不需要转义的变量时,可以使用块:
{%autoescape false%}
{{something}}
{{{其他东西}}
{{重要的事情}
{%endautoescape%}
当您有许多不需要转义的变量时,可以使用块:
{%autoescape false%}
{{something}}
{{{其他东西}}
{{重要的事情}
{%endautoescape%}
有些人似乎会关闭带有安全风险的自动转义,以操纵字符串显示
如果只想在字符串中插入一些换行符并将换行符转换为
,则可以使用jinja宏,如:
{% macro linebreaks_for_string( the_string ) -%}
{% if the_string %}
{% for line in the_string.split('\n') %}
<br />
{{ line }}
{% endfor %}
{% else %}
{{ the_string }}
{% endif %}
{%- endmacro %}
有些人似乎会关闭带有安全风险的自动转义,以操纵字符串显示
如果只想在字符串中插入一些换行符并将换行符转换为
,则可以使用jinja宏,如:
{% macro linebreaks_for_string( the_string ) -%}
{% if the_string %}
{% for line in the_string.split('\n') %}
<br />
{{ line }}
{% endfor %}
{% else %}
{{ the_string }}
{% endif %}
{%- endmacro %}
具体来说,为了处理换行符,我尝试了许多选项,最后终于解决了这个问题:
{% set list1 = data.split('\n') %}
{% for item in list1 %}
{{ item }}
{% if not loop.last %}
<br/>
{% endif %}
{% endfor %}
{%set list1=data.split('\n')%}
{列表1%中的项目的%1}
{{item}}
{%if not loop.last%}
{%endif%}
{%endfor%}
这种方法的优点是它与自动转义兼容,让一切都很好、安全。它还可以与过滤器结合使用,比如urlize
当然,它与Helge的答案类似,但不需要宏(而是依赖于Jinja内置的拆分函数),也不需要在最后一项后添加不必要的
。为了处理换行符,我尝试了许多选项,最后才解决了这个问题:
{% set list1 = data.split('\n') %}
{% for item in list1 %}
{{ item }}
{% if not loop.last %}
<br/>
{% endif %}
{% endfor %}
{%set list1=data.split('\n')%}
{列表1%中的项目的%1}
{{item}}
{%if not loop.last%}
{%endif%}
{%endfor%}
这种方法的优点是它与自动转义兼容,让一切都很好、安全。它还可以与过滤器结合使用,比如urlize
当然,它与Helge的答案类似,但不需要宏(而是依赖于Jinja内置的split
函数),也不需要在最后一项后添加不必要的