连接Django中的httpresponse对象
我正在用Django开发一个网站,想要为网站的头部和底部保持一个通用的模板。不过,头部和底部的内容会根据登录的用户不同而有所变化。那么,有没有办法可以使用:
header=render_to_response('header.html',{....})
footer=render_to_response('footer.html',{....})
content=render_to_response('content.html',{....})
return header+content+footer
2 个回答
1
你应该了解一下模板继承。
简单来说,这个功能让你可以创建一个“基础”模板,里面有你的头部和底部,比如说你可以定义一个“内容块”。
然后,你可以让其他模板“扩展”这个基础模板,通过填充你在基础模板中定义的(空的或非空的)内容块。
像你现在这样使用render_to_string的方法,在Django中并不是正确的做法。
4
Harsh,直接把 HttpResponse
对象拼接在一起并不是正确的方法。Django(我觉得这是合理的)推荐使用模板的包含和继承。请看看 {% block %}
、{% include %}
和 {% extend %}
这些模板标签,详细信息可以在这里找到。
在你的情况下,实现模板继承的方式如下:
base.html :
<div> header code </div>
{% block content %}
<div>Default content</div>
{% endblock content %}
<div> footer code </div>
my.template.html :
{% extend 'base.html' %}
{% block content %}
<div>My new content</div>
{% endblock content %}