为啥 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

Render_to_response 多个参数 [重复]

django 在 render_to_response() 后注销我

如何使用 render_to_response 在 Django 中的 div 中呈现 html 页面? [复制]