代码之家  ›  专栏  ›  技术社区  ›  Thierry Lam

如何将模型中的实际HTML注入模板?

  •  5
  • Thierry Lam  · 技术社区  · 15 年前

    在我的管理员中,我有一个文本区域,用户可以在其中输入HTML:

    <ul>
      <li>blah</li>
    </ul>
    <p>
      Stuffs
    </p>
    

    当我把上面的内容推到模板上并查看页面的源代码时,我得到:

    &lt;ul&gt;
      &lt;li&gt;blah&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
      Stuffs
    &lt;/p&gt;
    

    我应该如何处理输出,以便在页面源代码中看到实际的HTML?

    3 回复  |  直到 15 年前
        1
  •  6
  •   Nixarn    15 年前

    你需要“安全”过滤器。因为它是自动逃逸的。

    {{ my_html|safe }}
    
        2
  •  0
  •   kender DaveL    15 年前

    请参阅模板标记文档 here 检查 autoescape 标签说明。

        3
  •  0
  •   bobince    15 年前

    _文本区_表示 <textarea> ?

    因为如果是这样,逃跑 < &lt; (等)就是你 必须 在文本区域或任何其他HTML元素内执行:Django正在执行正确的操作。您在页面上看到了正确的、解码的文本版本;谁在乎源代码是什么样子的?

    如果您不逃避文本区域的内容,那么您不仅会生成无效的HTML,而且还会对用户输入的以下内容进行攻击:

    </textarea>
    <script>
        steal(document.cookie);
        location.href= 'russian malware site';
        // etc.
    </script>