在崩溃统计网站上工作时,我遇到了以下情况。
我有一个Django安装作为我们的崩溃统计网站运行,它服务器动态网页,我需要它显示(以及其他信息)我们的应用程序的用户上传的崩溃日志之一。这些日志采用XML格式,大致形成如下:
<?xml ... ?>
<?xml-stylesheet type="text/xsl" ... ?>
...
<RunTimeLog>
<xsl:stylesheet id="stylesheet" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="xsl:stylesheet"/>
<xsl:template match="/RunTimeLog">
<html>
<head>
<style type="text/css">
... some styling code ...
</style>
<script language="javascript">
... some dynamics code ...
</script>
</head>
<body>
... some HTML, XSL and JS for the page layout ...
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<LogHeader>
...
</LogHeader>
<LogEvents>
...
</LogEvents>
</RunTimeLog>
现在,正如您所看到的,这包括在一个文件中呈现日志文件所需的所有内容(因为我们希望日志易于分发和读取)。此代码作为魅力,当在浏览器中打开XML时,会出现格式正确的日志。现在我尝试使用以下Django模板在不同的页面中呈现它:
<html>
<head>
... import JQuery and other awesome stuff ...
</head>
<body>
<div id="log">
</div>
<div id="logbuffer">
{{ log }} <!-- Django inserts the raw XML in here... -->
</div>
<script>
xsltProcessor = new XSLTProcessor();
resultDocument = xsltProcessor.transformToFragment($('#logbuffer').innerHTML, document);
$('log').append(resultDocument);
</script>
</body>
</html>
现在,这不起作用... logbuffer div确实按预期显示原始XML,但格式化不起作用,脚本中的第二行将 null 返回到 resultDocument
我想知道这是正确的做法吗?有谁知道为什么这不起作用?我知道在Django方面有不同的解决方法,但我宁愿保留格式化客户端。
任何帮助将不胜感激!
答案 0 :(得分:1)
{{ log }}
会插入转义 html,而不是原始HTML。所以$('#logbuffer').innerHTML
会返回
<?xml ... ?>
<?xml-stylesheet type="text/xsl" ... ?>
and so on...
您必须将log
变量标记为安全:
{{ log|safe }}