我有以下模板结构(为简洁起见而简化):
base1.html :
<html>
<head>{% block head %}{% endblock %}</head>
<body>{% block body %}{% endblock %}</body>
</html>
base2.html :
{% extends "base1.html" %}
{% block head %}
<meta .... />
<title .... />
css includes etc.
{% endblock %}
{% block body %}
{% block header %}{% endblock %}
{% block featured %}{% endblock %}
{% block navigation %}{% endblock %}
{% block content %}{% endblock %}
{% block footer %}{% endblock %}
{% endblock %}
base3.html 和 base4.html ,这进一步明确了之前基本模板中定义的通用主体结构(此处未显示)。最后一个模板扩展了 base4.html ,覆盖了具体内容的块(标记由基本模板处理)。
问题是:我有两个模板: main.html 和 article.html ,它们都扩展了 base4.html 。但是在 article.html 中,我希望 base2.html 中定义的正文块的顺序不同(精选块在之后)导航)。我怎样才能做到这一点?或者如何重构模板结构以实现这一目标?覆盖顶级模板中的块 body 不起作用。
答案 0 :(得分:2)
我认为你不会有这样的运气。一个简单的解决方案可能是有一个base2.html查看的可选变量,它决定了备用顺序。实际上,甚至可以在article.html模板本身中定义此变量的存在。我没有尝试过,但以下内容可能有效:
{% with alternate_order=1 %}
{% include base4.html
{% endwith %}
答案 1 :(得分:1)
为什么你有这么多级别的继承?作为一个注释,django没有任何限制,但通常我们使用三级方法。见docs
以下是一些建议:
<div id='sidebar'>{% block sidebar_content %}{% endblock %}</div>
至于你的问题,如果你需要一个不同的布局,那就是你的分支。也就是说,如果使用不同的CSS不起作用。