2015-05-28 2 views
4

Я создал шаблон Django, который требует параметров из представления Django. Одним из параметров является бит html, который отображает диаграмму gantt. Вместо того, чтобы отображать параметр как правильный html, он отображает его как текст.Django шаблон рендеринга HTML-параметр как текст

Почему он обрабатывает содержимое параметра как текст вместо того, чтобы распознавать теги и <div>?

HTML, в параметре я передаю в представление Django выглядит следующим образом:

 <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>  

ответ

2

В шаблоне вы можете использовать фильтр safe.

{{ variable_with_html_tag_value | safe }} 
1

Вам необходимо отметить ваш html как безопасный, возможно, используя django.utils.safestring.mark_safe и передав ваш параметр, поскольку переменная решит вашу проблему.

0

Взгляните на документацию safe filter. Это необходимо, чтобы отметить строку safe, которая безопасна для печати, так же как и без экранирования HTML. Обратите внимание, что когда autoescape отключен, безопасный фильтр не действует. С autoescape вы можете делать то, что вам нужно следующим образом:

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

Это автоматически выключается, спасаясь от HTML, так что содержимое переменной body выводятся как есть.

Смежные вопросы