在Django中如何在base.html中呈现hello.html?

时间:2016-01-01 02:08:13

标签: python django heroku

我是django的新手,我误解了如何使用模板。

我有一个名为base.html的文件,我将其视为hello.html的父文件。

在hello.html中我有这样的语法:

{% extends "base.html" %}
{% block hello %}
<h1>hello</h1>
I should see this template. This is the hello.html template.
{% endblock %}

在base.html中我有这样的语法:

{% block hello %}{% endblock %}

据我所知,django应该在base.html中呈现hello.html

当我部署我的两个html文件时,django会忽略我的语法。

问题:如何在base.html中呈现hello.html?

文件在github中可见:

https://github.com/danbikle/sof1231/blob/master/hello/templates/base.html

https://github.com/danbikle/sof1231/blob/master/hello/templates/hello.html

我还使用这些命令将它们部署到heroku:

heroku create sof1231
git push heroku master

您可以看到base.html已部署到https://sof1231.herokuapp.com

再次 如何在base.html中呈现hello.html?

2 个答案:

答案 0 :(得分:2)

要在另一个模板中呈现模板,请使用include

<强> base.html文件

{% include 'hello.html' %}

答案 1 :(得分:0)

您的模板旨在与继承一起使用,您在问题中显示的简化模板没有任何问题(我没有在github上检查这些模板)。

我认为您的问题可能是由您的视图呈现base.html模板造成的,而后者应该呈现hello.html模板。您应该将视图代码添加到您的问题中,以便验证这一点。您的视图代码应该是这样的,它会呈现子模板hello.html

def hello(request):
    template_variables = {'a': 1, 'b': 2}
    return render(request, 'hello.html', template_variables)

另一个答案(您已接受)建议使用include。我不认为include是正确的做法。

从基础模板继承和从另一个文件简单包含内容之间存在差异。模板继承的一个重要好处是,您可以将常用内容(例如菜单,边栏,页脚等)添加到&#34; base&#34;模板,然后从子模板中的该基础继承而不复制每个页面的公共内容。另一个好处是子模板可以覆盖基本模板中的内容,例如, <title>。这允许您在基本模板中标记布局的区域(使用block),然后使用其他内容覆盖块的内容。使用简单的include无法做到这一点。