Django,将HTML放入模板时自动对HTML进行“清理”,如何阻止它?

Posted

技术标签:

【中文标题】Django,将HTML放入模板时自动对HTML进行“清理”,如何阻止它?【英文标题】:Django, automatic HTML "sanitizing" when putting HTML to template, how to stop it? 【发布时间】:2011-04-02 20:52:43 【问题描述】:

我对此感到有些困惑,因为似乎 Django 模板具有可选的 html 过滤器,但这似乎是自动发生的。我正在制作这个演示应用程序,用户将在其中执行一个调用 python 脚本的操作,该脚本检索一个 url,然后我想在新窗口中显示它.. 一切都很好,除非当显示返回时,HTML 以这种格式被清理(我在查看页面源时看到这个,在浏览器中它显示为常规HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta content="text/html; charset=utf-8" http-equiv="content-type" /><script type="text/javascript">//<![CDATA[
si_ST=new Date

这是相同的常规 HTML 版本:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta content="text/html; charset=utf-8" http-equiv="content-type" /><script type="text/javascript">//<![CDATA[ si_ST=new Date //]]></script><script type="text/javascript">//<![CDATA[ _G=ST:(si_ST?si_ST:new Date),Mkt:"en-

我只是将它输出到我的 html 模板中的一个基本块,该模板没有其他格式(没有 HTML 等),只有 1 个块,这个输出去..关于为什么会发生这种情况以及如何发生的任何建议显示常规 HTML(因此它将在浏览器中显示页面而不是 HTML 文本)表示赞赏.. 谢谢

【问题讨论】:

【参考方案1】:

使用安全过滤器:

 myvariable|safe 

如果您需要像这样处理大部分模板(也就是说,如果您发现自己一遍又一遍地使用|safe),您可以禁用自动转义批发:

% autoescape off %
blah myvariable blah myothervariable
% endautoescape %

【讨论】:

我得到了这个:content |safe 但后来我得到一个错误:“TemplateSyntaxError at /web_auto/call_mechanize_script/ 无法解析一些字符:内容| ||安全”跨度> % autoescape off % 工作正常.. 谢谢你,所以我给你正确的答案,不知道为什么它不适用于其他方式 应该是 content|safe ,“content”、“|”和“safe”之间没有空格。【参考方案2】:

还有autoescape 控制转义块宽。

【讨论】:

【参考方案3】:

看看“安全”过滤器,它禁用了 Django 的默认转义:

http://docs.djangoproject.com/en/1.2/ref/templates/builtins/#safe

【讨论】:

任何人都可以帮助解决语法问题,我知道它在哪里说安全,但我无法弄清楚语法,我正在尝试 myvariable safe 和其他一些东西,但它不起作用 我确实尝试过,但出现错误,我在 Ned Batchelder 的回答中提到

以上是关于Django,将HTML放入模板时自动对HTML进行“清理”,如何阻止它?的主要内容,如果未能解决你的问题,请参考以下文章

django:在包含的模板中使用块

django:在包含的模板中使用块

08-Django模板

如何全局禁用 Django 模板的自动转义?

Django之模板渲染

Python自动化运维:Django基础