我是django的新手,我正在尝试模板继承,但无法让它工作。我无法同时显示页面中的所有块。不确定我是否遗漏了网址,视图或设置中的内容。我在PyCharm上使用Python 3.6 in venv / Django 2.0.4
下面我的例子的详细信息 - myhome是项目名称,smarthome是app name
文件夹结构
base.html文件
navtopbar.html
navsidebar.html
smarthome urls.py
smarthome views.py
- 最初我将此作为base.html,但根据以下主题中的建议,更改为navtopbar。但后来不确定如何让应用程序同时显示navsidebar
设置
我按照this thread中的建议,但未能使其工作。感谢这里的任何帮助。
答案 0 :(得分:0)
首先要小心命名!
您正在navtopbar.html
在navtopbar.html
中,您只覆盖navtopbar
块,因此只会替换该块。
Djnago模板的工作原理如下:
<强> base.html文件强>
{% block body %} base {% endblock %}
{% block content %} base {% endblock %}
现在,如果从视图中呈现home.html
,它应该是:
<强> home.html的强>
{% extends 'base.html' %}
<!-- the blocks you override here only replaced -->
{% block body %}
home
{% endblock %}
如上面的html,你只覆盖了一个块,它会覆盖一个块而其他块保持不变。如果要覆盖{% block content %}
,则需要覆盖以下相同的html:
<强> home.html的强>
{% extends 'base.html' %}
<!-- the blocks you override here only replaced -->
{% block body %}
home
{% endblock %}
{% block content %}
home content
{% endblock %}
如果您想要包含其他html中的内容,可以将其与include
代码
请考虑以下文件:
<强> content.html 强>
<h3>This is common content</h3>
现在您可以在home.html
中添加此内容,如下所示:
<强> home.html的强>
{% extends 'base.html' %}
<!-- the blocks you override here only replaced -->
{% block body %}
home
{% endblock %}
{% block content %}
{% include 'content.html' %}
{% endblock %}