2011-09-12 85 views
2

我對Django的模板系統很新穎-基本上,我試圖打印出我傳遞給上下文中的django的列表的所有內容。Django在模板中顯示列表的內容

我urls.py的相關部分是這裏 - 現在

url(r'^class/$', twobooks.classes.views.getAllInformation, {'template_name':'classes/displayBooks.html'}), 

,在我的觀點getAllInformation如下 -

def getAllInformation(searchTerm,template_name): 
    nameAndNumberStore = modifySearchTerm(searchTerm) 
    url = modifyUrl(nameAndNumberStore) 
    soup = getHtml(url) 
    information = [] 
    if (checkIfValidClass(soup,nameAndNumberStore)): 
     storeOfEditions = getEdition(soup) 
     storeOfAuthorNames = getAuthorName(soup) 
     storeOfBookNames = getBookNames(soup) 
     storeOfImages = getImages(soup) 
    information.append(storeOfAuthorNames)#REMEMBER this is a list of two lists 
    information.append(storeOfEditions) 
    return render_to_response(
    template_name, 
    {'authors': storeOfAuthorNames}, 
    ) 

和displayBooks.html如下 -

<html> 
<head> 
<body> 
<h1>Testing the class page backend</h1> 
<ul> 
{ % for author in authors|safe% } 
    <li>{{ author }}</li> 
{ % endfor % } 
</ul> 

</body> 

</html> 

我認爲這很簡單,但我不確定發生了什麼事,所以我想請求一些幫助 - 謝謝!

回答

3

運用safe過濾器會變成什麼一個字符串。如果你從文字[1, 2, 'foo', u'bar']開始,那麼你最終會得到大約字面u"[1, 2, 'foo', u'bar']"(或類似的東西—)我不太確定它是如何渲染的,因爲我從來沒有嘗試過;我也說「大約「因爲它實際上是一個SafeString實例而不是一個unicode實例)。然後,迭代遍歷生成的字符串中的每個字符,這不是你想要的。

相反,你可以使用safeseq過濾器的過濾safe適用於每個元素的順序,

<ul> 
{% for author in authors|safeseq %} 
    <li>{{ author }}</li> 
{% endfor %} 
</ul> 

或者,你可以申請safe迭代器裏面的值。

<ul> 
{% for author in authors %} 
    <li>{{ author|safe }}</li> 
{% endfor %} 
</ul> 

我會建議safeseq,你可能再能進一步優化模板,如果你願意,與unordered_list過濾器,如果你只希望顯示的值。 (請注意,我不確定它的行爲如何,因此這可能會使它不安全,您需要嘗試一下。)

<ul>{{ authors|safeseq|unordered_list }}</ul> 
2

如果您提到storeOfAuthorNames的數據格式,您當前正在獲取的輸出以及您期望的內容,它會有所幫助。

我可以從你的觀點講的是:

  • authorsstoreOfAuthorNames)由getAuthorName(soup)
  • 生產如果checkIfValidClass(...)回報False,你會得到一個NameError嘗試引用storeOfAuthorNames因爲當結束將未申報

如果我不得不猜測你的問題只在你的示例模板的基礎上, d說你的問題是authors|safe。您需要在要打印的值上應用safe篩選器,而不是列表本身。即

<ul> 
{ % for author in authors %} 
    <li>{{ author|safe }}</li> 
{ % endfor % } 
</ul>