django模板继承:如何不显示来自父级的块?

时间:2014-04-19 21:14:05

标签: html django twitter-bootstrap inheritance django-templates

开始我的第一个Django项目。模板和继承的新手。

我正在使用Bootstrap并想要一个引人注目的主页。所以我不想要侧边栏,只需要Jumbotron。 但是,我的index.html继承自base.html,并在我的主页上显示我想要的每个其他页面的侧边栏。我想要其他一切,导航,页脚等继承。

我的base.html:

{% block right_panel %}
blah blah blah
{% endblock %}

有没有办法在我的index.html中不继承这个块? 或者我是否制作一个独立的index.html模板,其中包含base.html中的所有块减去我不想显示的块?

什么是最佳做法?

修改

以下是base.html中令人讨厌的内容:

<div class="col-md-3 right">
    {% nevercache %}
    {% include "includes/user_panel.html" %}
    {% endnevercache %}
    <div class="panel panel-default">
    <div class="panel-body">
    {% block right_panel %}
    {% ifinstalled mezzanine.twitter %}
    {% include "twitter/tweets.html" %}
    {% endifinstalled %}
    {% endblock %}
    </div>
    </div>  
</div>

CSS正在渲染:<div class="panel-body">

我的page.html:

{% extends "base.html" %}

<!-- no right-panel content-->
{% block right_panel %}{% endblock %}

{% load mezzanine_tags keyword_tags %}

{% block meta_title %}{{ page.meta_title }}{% endblock %}

{% block meta_keywords %}{% metablock %}
{% keywords_for page as keywords %}
{% for keyword in keywords %}
    {% if not forloop.first %}, {% endif %}
    {{ keyword }}
{% endfor %}
{% endmetablock %}{% endblock %}

{% block meta_description %}{% metablock %}
{{ page.description }}
{% endmetablock %}{% endblock %}

{% block title %}
{% editable page.title %}{{ page.title }}{% endeditable %}
{% endblock %}



{% block main %}
{% endblock %}

当我添加:

`{% block right_panel %}{% endblock %}

到page.html的顶部,内容无法呈现。

最好的方法是什么?我应该创建一个新块并将其包裹在正在设置的样式周围,然后将其留在其他模板中吗?或者我应该将有问题的块从base.html移动到另一个模板文件并将其包含在我想要它呈现的页面上。

另外,另一件事。如果我从page.html中删除{% block right_panel %}{% endblock %}并将其放在从page.html继承的gallery.html中,则内容仍会呈现。

2 个答案:

答案 0 :(得分:8)

只需在index.html中将该块声明为空块,即可“静音”base.html中的内容:

即,在index.html中:

...
{% block right_panel %}{% endblock %}
...

答案 1 :(得分:2)

为清楚起见,如果您阻止base.html中的某些代码:

{% block right_panel %}
    <div class="footerlinks">
        <ul>
            <li><a href="#">about us</a></li>
            <li><a href="#">contact us</a></li>
            <li><a href="#">help</a></li>
        </ul>
     </div>
{% endblock %}

它将显示在所有扩展base.html的模板中,除非重写该块,从而替换该块。

因此,

{% block right_panel %}{% endblock %}

将有效地静音该部分。然后,您可以在模板中构建替换件,将所有内容保存在一个位置。

如果您的努力在页面上移动,那么仅阻止该部分的可见部分可能是明智的:

<div class="footerlinks">
    {% block right_panel %}
    <ul>
        <li><a href="#">about us</a></li>
        <li><a href="#">contact us</a></li>
        <li><a href="#">help</a></li>
    </ul>
    {% endblock %}
 </div>