2013-10-14 50 views
5

我在嘗試顯示在django視圖上創建的代碼的html塊時遇到問題。 這是發生了什麼。Django:將HTML字符串傳遞給模板

在我看來,我試圖傳遞給模板一堆書描述,我會根據用戶操作隱藏/顯示。這些描述存儲在服務器上的html文件中。

def my_view() 
    #loop through the list of books, read their corresponding a html file, and parse it to fill in the book details 
    #code, code, code... 
    #take the resulting string, append it on books description array, log it and send it to template 
    logger.debug(books_description["Clockwork orange"]) 
    return render_to_response("my_template.html", {'bd': books_description}, context_thingy) 

到目前爲止這麼好。我的日誌顯示HTML字符串正是因爲它應該:現在

<div id="modal_book_name">Clockwork orange</div> 
<div id="modal_book_genre">Dystopian fiction</div> 
<br> 
<div id="modal_book_desc">yadayadayadayada</div> 

,因爲我不想要的內容在我的html代碼鋪設約,我讀的書描述成像這樣一個javascript變量:

books_description = {}; 
{% for book, book_desc in bd.items %} 
     books_description["{{ book }}"] = "{{ book_desc|escapenewline }}" 
{% endfor %} 

escapenewline是一個過濾器,它在每行的末尾放置一個\以確保javascript能夠正確解釋整個字符串內容。

最後,當用戶想要查看某本書上的描述時,他只需點擊它,模式就會顯示出書的描述。爲了這個,我有:

console.log(books_description[book_name]); 
    $("#modal_info").html(books_description[book_name]); 

再次,一切似乎很動聽本的console.log:

<div id="modal_book_name">Clockwork orange</div><div id="modal_book_genre">Dystopian fiction</div><br><div id="modal_book_desc">yadayadayadayada</div> 

不幸的是,當我打開網頁的modal_info格是空的。當我打開瀏覽器的開發者工具和檢查HTML的該div這裏是我所看到的:

<div id="modal_info"> 
     "<div id="modal_book_name">Clockwork orange</div><div id="modal_book_genre">Dystopian fiction</div><br><div id="modal_book_desc">yadayadayadayada</div>" 
</div> 

的問題是在這些引號。他們是如何出現在那裏的?我怎麼能擺脫他們,爲什麼他們放在那裏呢?

在此先感謝。如果有什麼不清楚的地方,隨時提問,我會澄清它。

UPDATE:嗯,原來,modal_info DIV不畢竟..文本只有相同的顏色作爲背景空。道歉,這是我的愚蠢。但問題依然存在。在那裏我應該看到:

Clockwork Orange 
Dystopian fiction 

yadayadayadayada 

我看,而不是字面的html:

<div id="modal_book_name">Clockwork orange</div><div id="modal_book_genre">Dystopian fiction</div><br><div id="modal_book_desc">yadayadayadayada</div> 

我試圖解析字符串與parseHTML功能HTML:

var book_desc = $.parseHTML(books_description[book_name]); 
    $("#modal_info").html(book_desc); 

但結果是相同的。任何想法如何讓瀏覽器將該字符串解釋爲html代碼而不是字符串

回答

9

問題已解決。沒有我想象的那麼戲劇化。事實上,有django的被轉換的HTML標記如「<」和「>」到「& LT」和「& GT」

這導致在頁面上的正確的輸出,但不能創建相應的DOM對象。

修復:

{% autoescape off %} 
    {% for book, book_desc in bd.items %} 
     books_description["{{ book }}"] = "{{ book_desc|escapenewline }}" 
    {% endfor %} 
{% endautoescape %} 

我花了一段。 如果有人遇到了類似的問題,這裏的一對autoescaping

autoescape filter

一些英特爾