Django模板将HTML参数呈现为文本

时间:2015-05-28 19:42:53

标签: python html django

我创建了一个需要Django视图参数的Django模板。其中一个参数是一些显示甘特图的html。它不是将参数渲染为正确的html,而是将其渲染为文本。

为什么将参数内容视为文本而不是识别<script><div>标记?

传递给Django视图的参数I中的html如下所示:

        <script language="Javascript" type="text/javascript">
           window.onload = function() {
           var MyVar = [
            {label: "Label-less", times:[{"starting_time":1420228800000,"ending_time":1420257600000}, {"starting_time":1420264800000, "ending_time":1420293600000}, ]},
            ];

           function drawtimeline_MyVar() {
              var chart = d3.timeline()
              .showBorder()
              .stack() // toggles graph stacking
              ...
              *(code removed here for size purposes)*
              ...
             var svg = d3.select("#DIV_MyVar").append("svg").attr("width", 1000)
             .datum(MyVar).call(chart);
              }


        //Call the function
        drawtimeline_MyVar();
        }

       </script>

       <div>
           <h3>Mehe</h3>
           <div id="DIV_MyVar"></div>
       </div>
       <div id="DIV_MyVar_hover" class="hoverDiv">
           <div class="coloredDiv"></div>
              <table border=1 cellpadding=10>
                  <tr>
                    <td>
                      <p>Task ID: </p><div id="name"></div>
                    </td>
                  </tr>
              </table>

       </div>

参数 comm_request 在模板底部使用,如下所示:

<html>

  <head>
    <title>Search Results</title>
    <meta charset="utf-8">
    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
    <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
    <script language="Javascript" type="text/javascript" src="./Review/d3-timeline-master/src/d3-timeline.js"></script>
    <script type="text/javascript">
    {{ JSLIB }}
    </script>
    <STYLE type="text/css">
        .axis path,
        .axis line {
          fill: none;
          stroke: black;
          shape-rendering: crispEdges;
        }
        .axis text {
          font-family: sans-serif;
          font-size: 10px;
    </STYLE>

</head>

<body>
<div class="container">
    <div class="page-header">
        <h1>
            <p class="text-center">Much Results</p>
        </h1>
    </div>
</div>
<div class="container">
    <h3><p class="text-center">Charts</p></h3>
</div>
<div class="container">
    <h4 class="text-center">
        Gantt Chart
    </h4>
</div>
{{ comm_requests }}
</body>
</html>    

3 个答案:

答案 0 :(得分:2)

在模板中,您可以使用safe过滤器。

{{ variable_with_html_tag_value | safe }}

答案 1 :(得分:1)

您需要将html标记为安全,可能使用django.utils.safestring.mark_safe并将参数作为变量传递将解决您的问题。

答案 2 :(得分:0)

查看safe filter的文档。这是标记字符串 safe 所必需的,可以安全地按原样打印而不转义任何HTML。请注意,当autoescape设置为关闭时,安全过滤器无效。使用autoescape,您可以按照以下方式执行操作:

{% autoescape off %}
    {{ body }}
{% endautoescape %}

这会自动关闭HTML转义,以便变量body的内容按原样输出。