连接Django中的httpresponse对象

1 投票
2 回答
1179 浏览
提问于 2025-04-17 04:50

我正在用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 %}

撰写回答