【问题标题】:Literal HTML in Django without using a variable?Django中的文字HTML不使用变量?
【发布时间】:2011-02-18 14:59:29
【问题描述】:

我有一堆 HTML:

<div align="center" id="whatever">
<a href="http://www.whatever.com" style="text-decoration:none;color:black">
<img src="http://www.whatever.com/images/whatever.jpg" />
</a></div>

我想在浏览器中将其全部输出为文字 HTML,即将上述内容显示给用户。 (编辑:不幸的是,由于我正在使用的系统的怪癖,我无法访问我的模板中的 Django 变量,所以我不能使用{{ | escape }}

有什么方法可以做到这一点,无论是使用 Django 模板标签还是特殊的 HTML 标签,而无需手动进行 HTML 转义?

谢谢!

【问题讨论】:

    标签: html django literals


    【解决方案1】:

    如果 HTML 必须包含在模板本身中,您可以使用 filter 块:

    {% filter force_escape %}
        <div align="center" id="whatever">
        <a href="http://www.whatever.com" style="text-decoration:none;color:black">
        <img src="http://www.whatever.com/images/whatever.jpg" />
        </a></div>
    {% endfilter %}
    

    Documentation

    【讨论】:

      【解决方案2】:

      是的,只需使用escape 过滤器:

      {{my_html|escape}}
      

      编辑force_escape

      {% filter force_escape %}
         ... your HTML to be escaped ...
      {% endfilter %}
      

      或者,来自 Python:

      from django.utils.html import escape
      escaped_html = escape(html_to_escape)
      

      【讨论】:

      • 对不起 - 由于我正在使用的特定系统的怪癖,我实际上没有能力将变量放入 Django 模板中。我可以逃脱整个字符串,但它有点长。有没有其他办法?
      • 这在正常情况下是无操作的。正如 AndiDog 在他的回答中所说,Django 默认自动转义。从 1.0 发布之前就已经这样做了。
      • 啊,好吧,在这种情况下,使用force_escape 过滤器(见编辑)。
      【解决方案3】:

      如果您不想在模板中执行它并且它以某种方式没有被转义(假设模板作者使用{{ var|safe }}),您总是可以自己转义它

      from django.utils.html import escape
      
      escaped_html = escape(my_html)
      

      【讨论】:

      • PS:我现在明白了,我以某种方式读到您无权访问模板,而不是您无权访问模板中的变量。
      【解决方案4】:

      Django 在插入它们时默认使用auto-escape 上下文变量(另请参阅documentation)。因此,除非您将变量标记为安全,或者使用autoescape off 模板标签,否则只需使用{{ contextVariable }}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-17
        • 1970-01-01
        • 1970-01-01
        • 2021-08-03
        • 1970-01-01
        • 2020-04-17
        • 2018-08-15
        • 2023-03-16
        相关资源
        最近更新 更多