为啥 render_to_response 不能正常工作
Posted
技术标签:
【中文标题】为啥 render_to_response 不能正常工作【英文标题】:Why the render_to_response not working properly为什么 render_to_response 不能正常工作 【发布时间】:2012-05-13 15:55:14 【问题描述】:这是我的代码的 sn-p。
soup=BeautifulSoup(html_document)
tabulka=soup.find("table",)
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 的 bug 吗?
【问题讨论】:
【参考方案1】:好吧,dls
是一个 Python 列表,其中包含所有匹配元素的文本。 render_to_response
不知道如何处理列表,所以它只是把它变成一个字符串。如果您想将所有元素作为 HTML 插入,请尝试将它们加入到单个文本中,如下所示:
dls = "".join(dls)
请注意,这样做会将来自其他来源的实时 HTML 粘贴到您自己的页面中,这可能是不安全的。 (如果其中一个 dds 包含恶意 javascript 会怎样?你信任那个 HTML 的提供者吗?)
【讨论】:
【参考方案2】:在 Django 中渲染模板时,您必须使用 RequestContext 实例。
这样说
return render_to_response('login.html','at':at, context_instance = RequestContext(request))
要使用它,您需要按如下方式导入:
from django.template import RequestContext
希望这对你有用。 :)
【讨论】:
您应该从 django.shortcuts 导入 render 并使用return render(request, 'result.html','search_key':search_key,'turnpages ':tps,'bookmarks':dls)
,而不是使用带有 RequestContext 的 render_to_response。渲染是 render_to_response 但带有 RequestContext。以上是关于为啥 render_to_response 不能正常工作的主要内容,如果未能解决你的问题,请参考以下文章
django验证码用return render_to_response('bb.html','news':buf.getvalue())不能正常显示图片!
Django - render()、render_to_response() 和 direct_to_template() 有啥区别?
render_to_response 给出 TemplateDoesNotExist