【问题标题】:django template inheritance: how to NOT display block from parent?django 模板继承:如何不显示来自父级的块?
【发布时间】:2014-06-04 05:36:17
【问题描述】:

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

我正在使用 Bootstrap 并想要一个引人注目的主页。所以我不想要侧边栏,只想要 Jumbotron。 但是,我的 index.html 继承自 base.html 并在除主页之外的所有其他页面中显示我想要的侧边栏。我希望其他所有内容,导航,页脚等都可以继承。

我的base.html:

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

有没有办法不继承我的 index.html 中的这个块? 或者我是否使用 base.html 中的所有块减去我不想显示的块制作一个独立的 index.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 正在渲染:&lt;div class="panel-body"&gt;

我的页面.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,内容仍会呈现。

【问题讨论】:

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


    【解决方案1】:

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

    即,在 index.html 中:

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

    【讨论】:

    • 我试过了,得到了一个 {% blocktrans %} 错误。当我将 {% block right_panel %}{% endblock %} 放在 blocktrans 之外时,不会显示任何内容,但仍会呈现空的 CSS 块。
    • Tge i18n 错误可能是其他原因。您的 index.html 顶部附近是否有 {℅ load i18n ℅}
    • 是的,如果一个空块不能解决它,我们将需要更多信息
    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 2020-01-23
      • 2018-08-18
      • 2020-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多