我有5个模板: index.html,detail.html,tag.html,login.html,register.html 和 base.html
所有5个模板都将扩展 base.html 。
index.html,detail.html,tags.html 具有相同的<section>...</section>
html代码段,并且具有来自后端的相同数据。我想将此段添加到 base .html ,因此无需在3个不同的模板中重复3次。
但是问题是 login.html和register.html 确实需要此部分。
我知道它是React.js还是Vue.js,将很容易使用组件来解决它。
在Django中解决这个问题的任何好方法吗?
答案 0 :(得分:4)
您可以有多个基本模板。例如:
base.html # Has the minimum shared elements
|
-> base_page.html # extends base.html (and adds your <section>...</section>)
| |
| -> index.html # extends base_page.html
| -> detail.html # extends base_page.html
-> login.html # extends.base.html
-> register.html # extends.base.html
答案 1 :(得分:1)
编辑
正如评论中提到的OP,要求与我可以解释的完全不同。因此,根据我的较新理解,可以使用的修复程序就是Tsang-Yi Shen's comment中正确指出的{% include 'section.html' %}
。
base.html
:
<!-- HTML here.... -->
{% block normal_content %}{% endblock %}
section.html
<section>
<!-- Special Section -->
</section>
只要您需要此部分,只需添加section.html
login.html
以及所有需要特殊部分的其他内容:
{% extends "base.html" %}
{% block normal_content %}
Hey There!
{% block section %}
{% include 'section.html' %}
{% endblock %}
{% endblock %}
原始答案
Selcuk's answer很好地解释了这个概念。我通过提供代码示例以供将来参考来补充该答案。
考虑base.html
:
<!-- HTML here.... -->
<!-- Common Section -->
{% block section %}{% endblock %}
{% block normal_content %}{% endblock %}
<!-- End Common Section -->
现在为您的版块使用模板baseWithSection.html
:
{% extends 'base.html' %}
{% block section %}
<section>
....
</section>
{% endblock %}
{% block special_content %}{% endblock %}
对于不包含此部分的所有页面,请像这样扩展base.html
:
{% extends 'base.html' %}
{% block normal_content %}
<!-- HTML here... -->
{% endblock %}
对于需要此部分的页面,请像这样扩展section.html
:
{% extends 'baseWithSection.html' %}
{% block special_content %}
<!-- Special HTML here, for templates pages requiring the section -->
{% endblock %}