django模板块覆盖

时间:2013-03-16 10:35:37

标签: django django-templates override

我正在使用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.htmlform.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容器代码中。由于我不想重复此代码,因此应该在一个模板中提供(模板可以通过列表,表单等进行扩展)。

我知道我可以在里面定义另一个块。但也许有更好的解决方案?

2 个答案:

答案 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:

  • 将内容内容块重命名为content_inner
  • 有两个块或更多块内容模板,并从您的视图或设置(或会话或其他)中扩展一个或另一个。要扩展最后一个选项:

base.html,content_col_right.html,content_col_left.html等,以及在content.html中:

{% extends variable_name %}

还有更多选项,但会使您的模板html(ID和类)非常依赖于您的视图代码。喜欢

提示:不要害怕上下文处理器并制作自己的处理器。