这是我的代码片段。
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,它是一个dict只包含一个html标签
<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的错误吗?
答案 0 :(得分:2)
嗯,dls
是一个包含所有匹配元素文本的python列表。 render_to_response
不知道如何处理列表,因此只需将其转换为字符串即可。如果要将所有元素作为HTML插入,请尝试将它们连接成一段文本,如下所示:
dls =&#34;&#34; .join(dls)
请注意,通过这样做,您将实时HTML从其他来源粘贴到您自己的页面中,这可能不安全。 (如果其中一个dds包含恶意Javascript会怎么样?你相信那个HTML的提供者吗?)
答案 1 :(得分:1)
在Django中渲染模板时,您必须使用RequestContext实例。
这样说
return render_to_response('login.html',{'at':at}, context_instance = RequestContext(request))
要使用此功能,您需要按如下方式导入:
from django.template import RequestContext
希望这适合你。 :)