2013-10-11 31 views
3

我使用的是Django的模板系統,以及Underscore.js。因此,我需要Django獨自留下Underscore認可並呈現的特殊字符。Django的逐字模板標籤不會阻止字符轉義

我已經檢查過django的版本,它是1.5.3。

一個很簡單的例子:

{% verbatim %} 
    <%= content %> 
{% endverbatim %} 

然而,當我在瀏覽器中查看此,源代碼還表示:

&lt;%= content %&gt; 

顯然,當下劃線得到HTML的保持,它沒有工作要做,因爲它找不到合適的標籤來解析。我已經嘗試過了幾個故障排除解決方案,沒有一個是有工作:

  1. 拼寫錯誤「逐字」導致一個錯誤,導致我相信Django的模板引擎識別標籤。
  2. 檢查django版本。用'import django; django.VERSION'我得到1.5.3。
  3. 使用{%autoescape off%}標籤,這同樣不起作用(也許是一個相關的問題)。

這是我的模板的完整文本,以防萬一出現任何進一步的線索。除{%verbatim%}之外的所有標籤都執行他們應該執行的任務。

{% extends "base.html" %} 

{# Determine which navigation element is 'active' #} 
{% block nav %} 
    {% with 'active' as lessons_active %} 
     {{ block.super }} 
    {% endwith %} 
{% endblock %} 

{% block content %} 

<div class="col-md-2 lesson-left-menu"> 
    <a href="#"><span class="glyphicon glyphicon-arrow-left"></span> Back to Lessons</a> 
</div> 
<div class="col-md-8 lesson-container"> 

     <div class="slide multi-slide"> 
      <div class="lesson-header"> 
       {% verbatim %} 
        <h3><%= moduleTitle %> <small><%= title %></small></h3> 
       {% endverbatim %} 
      </div> 

      <!-- Populate dyn. based on # slides in lesson --> 
      {% spaceless %} 
       <div class="lesson-progress"> 
        <div class="bar complete" style="width: 20%"></div> 
        <div class="bar complete" style="width: 20%"></div> 
        <div class="bar" style="width: 20%"></div> 
        <div class="bar" style="width: 20%"></div> 
        <div class="bar" style="width: 20%"></div> 
       </div> 
      {% endspaceless %} 

      {% verbatim %} 
       <%= content %> 
      {% endverbatim %} 

      <div class="well"> 
       <ul class="answers short-multi greek-text" style="min-height: 40px"> 
       </ul> 
      </div> 

      {% spaceless %} 
       {% verbatim %} 
       <% _.each(options, function(optionSet) { %> 
        <ul class="options short-multi greek-text inline"> 

         <% _.each(optionSet, function(option) { %> 
          <li><a href="#" data-value="<%= option.value %>"><%= option.display %></a></li> 
         <% }); %> 

        </ul> 
       <% }); %> 
       {% endverbatim %} 
      {% endspaceless %} 

     </div> 
</div> 
{% endblock %} 
+0

verbatim僅適用於不應解析Django模板語法的情況,即'{{...}}'和'{%...%}'。在這種情況下,你有'<%...%>'這不是Django模板語法。所以別的東西在困擾着你。你可能想看看中間件,因爲那些可能會做一些不需要的內容修改。 – bouke

+0

@bouke我明白你的意思了。我也嘗試過'{%autoescape off%}'和'{{「<%= %>」|安全}}'在我有'{%verbatim%}'的相同位置,這也沒有解決問題。不過,我認爲中間件方面並沒有什麼事情發生。 –

回答

0

你已經試過了,沒有在這些塊中包裝代碼(我知道這是一個延伸)。

在你的情況下,你不應該做任何事情來使這個渲染正確。我在我的Django項目中有相同的設置。

除非您要向頁面注入文本(通過變量或其他東西),否則不應該轉動{% autoescape off %},除非您想忽略django標記,否則不應使用{% Verbatim %}