我正在使用django开发一个应用程序,我不知道如何使用Django模板系统来实现使用模板继承的块覆盖。
我有一个base.html
模板:
[...]
<body>
{% block content %}
{% endblock %}
</body>
[...]
有index.html
模板显示JS滑块(它的内容直接位于body
标记中):
{% extends "base.html" %}
{% block content %}
// some javascript/css slider stuff here
{% endblock %}
并且有一些动态内容页面:list.html
,form.html
等(其内容应位于某些div
个容器中)。我以某种方式定义container.html
如下:
{% extends "base.html" %}
{% block content %}
<div class="container marketing">
<div class="container">
{% put overriden "content" block here %}
</div>
</div>
{% endblock %}
然后我可以像这样定义list.html
:
{% extends "container.html" %} # note what I'm extending here!
{% block content %}
this is my list
{% endblock %}
为什么吗
我想让我的基本模板尽可能通用(例如,启用客户端滑块 - 没有div
个容器)。我想将大部分动态页面(列表,表单等)包装在同一个HTML容器代码中。由于我不想重复此代码,因此应该在一个模板中提供(模板可以通过列表,表单等进行扩展)。
我知道我可以在里面定义另一个块。但也许有更好的解决方案?
答案 0 :(得分:3)
如果我理解正确,那么你真正想要的是container.html看起来像这样:
{% extends "base.html" %}
{% block content %}
<div class="container marketing">
<div class="container">
{% block content %}
{% endblock %}
</div>
</div>
{% endblock %}
为了重新定义继承container.html的模板的content
块是什么?
我认为如果不改变模板语言本身就不可能,但这是我发现自己也想做的事情。我不喜欢子模板必须关心它们是继承全宽模板,还是左侧边栏模板或基本模板,以便知道将主要内容放入哪个块名称。
答案 1 :(得分:0)
首先,我认为你可以有两个aproacches:
base.html,content_col_right.html,content_col_left.html等,以及在content.html中:
{% extends variable_name %}
还有更多选项,但会使您的模板html(ID和类)非常依赖于您的视图代码。喜欢
提示:不要害怕上下文处理器并制作自己的处理器。