1

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

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

4

2 回答 2

4

如果我理解正确,您实际上想要的是 container.html 看起来像这样:

{% extends "base.html" %}

{% block content %}
<div class="container marketing">
    <div class="container">
        {% block content %}

        {% endblock %}
    </div>
</div>
{% endblock %}

因此,您要重新定义content继承 container.html 的模板的块是什么?

如果不更改模板语言本身,我认为这是不可能的,但我发现自己也想做这件事。我不喜欢子模板必须关心它们是否继承全角模板、左侧边栏模板或基本模板才能知道将主要内容放入哪个块名称。

于 2013-03-16T13:29:12.763 回答
0

乍一看,我认为您可以有两种方法:

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

base.html、content_col_right.html、content_col_left.html 等,在 content.html 中:

{% extends variable_name %}

还有更多选项,但会使您的模板 html(id 和类)非常附加到您的视图代码。喜欢

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

于 2013-03-16T14:51:51.800 回答