目前我正在尝试为一个请求创建多个视图。对于1个观点,我这样做:
return render_to_response(
"/index/index.html",
{}
)
现在当我尝试向index.html添加一个“左”列时,我需要将它放在不同的视图上(因为我需要在其他地方应用相同的技术),这就是我的工作方式:
leftCol = direct_to_template(request,settings.viewPath + "/columns/left.html",{})
return render_to_response(
"/index/index.html",
{
'leftColumn': leftCol,
}
代码运行良好,但输出不是我的预期。 leftCol在输出的开头显示响应头:
“Content-Type:text / html; charset = utf-8”
如何删除此标头?我一直在尝试修改参数中的content_type和mimetype,但它不起作用。
答案 0 :(得分:4)
那是因为direct_to_template()
返回HttpResponse
,而不是字符串。您是否考虑过使用模板功能,例如: {% include %}
模板标记,或者编写自己的模板标记?
如果您坚持在视图中预渲染模板,然后将它们合并到模板中,请自行渲染模板,而不是使用direct_to_template()
。 e.g。
from django.template.loader import get_template
from django.template import RequestContext
def someview(request):
leftCol = get_template(settings.viewPath + "/columns/left.html").render(RequestContext(request)
render_to_response("/index/index.html", {'leftColumn': leftCol})
答案 1 :(得分:4)
使用render_to_string
(http://docs.djangoproject.com/en/dev/ref/templates/api/#the-render-to-string-shortcut)在渲染模板后获取字符串。或者,您可以使用{% include %}
在与当前模板相同的上下文中包含模板(但这仍然是手动的)。更好的方法是使用{% extends 'base.html' %}
继承的基本模板,它只包含您可以使用{% block %}
随意覆盖的常用模板功能,并允许您省略重复的模板内容,如左列。
答案 2 :(得分:0)
' render_to_response' function返回一个HttpResponse对象。您可以返回其content属性以仅访问要呈现的输出,而不是返回对象本身。
即
response = render_to_response(
"/index/index.html",
{
'leftColumn': leftCol,
}
return response.content