2011-09-12 10 views
2

私はDjangoのテンプレートシステムにはまったく新しいです。 基本的に、私はコンテキスト内でdjangoに渡すリストのすべての内容を出力しようとしています。Djangoはテンプレートの中のリストの内容を表示します

私urls.pyの関連部分は、

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

今here-である私の見解でgetAllInformationはようfollows-

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

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

</body> 

</html> 

これはかなり簡単だと思いますが、何が起こっているのか分かりませんので、助けをお願いします。ありがとう!

答えて

3

。あなたがリテラル[1, 2, 'foo', u'bar']で始まる場合、あなたはほぼu"[1, 2, 'foo', u'bar']"(または何かのようなもの)で終わるつもりです—私はそれをやってみたことがないと私はそれがどのようにレンダリングされているかについてはあまり確信していません;実際にはインスタンスではなく、unicodeインスタンスです)。次に、生成された文字列の各文字が繰り返し処理されます。これはあなたが望むものではありません。

代わりに、あなたは、シーケンス内の各要素にsafeフィルタを適用safeseqフィルタを使用することができます

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

または、イテレータ内の値にsafeを適用することができます。

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

あなたは、あなたが望むならunordered_listフィルタと、さらにテンプレートを最適化することができるかもしれとしてあなただけの値を表示したい場合、私は、safeseqをお勧めします。 (私はそれがどのように動作するかについてはっきりしていないことに注意してください。これが安全であると分かる可能性があります)。

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

storeOfAuthorNamesのデータ形式、現在入手している出力、および代わりに期待しているデータ形式について言及しておくと役に立ちます。

私はあなたのビューから言うことができるすべてがある:checkIfValidClass(...)戻りFalseそれ以来storeOfAuthorNamesを参照しようとしたとき、あなたはNameErrorになってしまいます場合

  • authorsstoreOfAuthorNames)はgetAuthorName(soup)
  • によって生成されます宣言されません

あなたの問題があなたのサンプルテンプレートのみに基づいていると推測しなければならない場合は、あなたの問題はauthors|safeと言います。リスト自体ではなく、印刷している値にsafeフィルタを適用することをお勧めします。すなわち、文字列にに変わりますsafeフィルタを適用する

<ul> 
{ % for author in authors %} 
    <li>{{ author|safe }}</li> 
{ % endfor % } 
</ul> 
関連する問題