Django在模板中显示列表的内容

时间:2011-09-12 10:31:03

标签: python django list templates

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

我认为这很简单,但我不确定发生了什么,所以我想请求一些帮助 - 谢谢!

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:2)

如果您提到storeOfAuthorNames的数据格式,您当前获得的输出以及您期望的内容,那将会有所帮助。

我能从你的观点看出:

  • authorsstoreOfAuthorNames)由getAuthorName(soup)
  • 生成
  • 如果checkIfValidClass(...)返回False,则在尝试引用NameError时最终会得storeOfAuthorNames,因为它将是未声明的

如果我必须根据您的示例模板猜测问题的位置,我会说问题出在authors|safe上。您需要对要打印的值应用safe过滤器,而不是列表本身。即。

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