1

这是我的代码片段。

soup=BeautifulSoup(html_document)
tabulka=soup.find("table",width="100%")
dls=tabulka.findAll("dl",{"class":"resultClassify"})
tps=tabulka.findAll("div",{"class":"pageT clearfix"})
return render_to_response('result.html',{'search_key':search_key,'turnpages
':tps,'bookmarks':dls})

我检查了dls,它是一个只包含一个html标签的dict

<dl>label contents contains some <dd> labels</dl>  

但是在将 dls 传递给 render_to_response 后,结果不正确。result.html中对应的模板代码为:

{% if bookmarks %}
{% for bookmark in bookmarks %}
{{bookmark|safe}}
{% endfor %}
{% else %}
<p>No bookmarks found.</p>
{% endif %}

输出结果 html 包含一个 python 字典格式,如下所示:

[<dd>some html</dd>,<dd>some html</dd>,<dd>some html</dd>,...]

这出现在输出 html 中。这很奇怪。这是 renfer_to_response 的错误吗?

4

2 回答 2

2

嗯,dls是一个包含所有匹配元素文本的 python 列表。render_to_response不知道如何处理列表,所以它只是把它变成一个字符串。如果要将所有元素作为 HTML 插入,请尝试将它们加入到单个文本中,如下所示:

dls = "".join(dls)

请注意,这样做会将来自其他来源的实时 HTML 粘贴到您自己的页面中,这可能是不安全的。(如果其中一个 dds 包含恶意 Javascript 会怎样?你信任那个 HTML 的提供者吗?)

于 2012-05-04T05:57:13.480 回答
1

在 Django 中呈现模板时,您必须使用 RequestContext 实例。

像这样说

return render_to_response('login.html',{'at':at}, context_instance = RequestContext(request))

为此,您需要按如下方式导入:

from django.template import RequestContext

希望这对你有用。:)

于 2012-05-04T06:00:11.360 回答