【问题标题】:Django: How to include a block site wide?Django:如何在整个站点范围内包含一个块?
【发布时间】:2011-10-26 14:17:30
【问题描述】:

抱歉,这是非常基本的。我已将我的静态 html 导航栏抽象为一个块,以便它可以从模型中动态呈现。我使用以下语法在 base.html 中创建了一个新的块标记

{% block navigation %}{% endblock %}

如何确保在每个页面上都呈现此内容?我需要为此创建某种中间层吗?到目前为止,我所做的一切都只是使用了主块。

编辑 2011 年 8 月 14 日星期日上午 11:25

我没有很好地解释这一点。导航块的内容是

{% extends 'base.html' %}

{% block navigation %}

<nav>
    <ul>
    {% for item in items %}
        <li><a href="{{ item.url }}">{{ item.name }}</a></li>
    {% endfor %}
    </ul>
</nav>

{% endblock %}

如果可能的话,我想在每个页面上呈现它,而不必单独浏览 base.html 的子模板并将其添加到它们中。

【问题讨论】:

  • 你阻止在这里没有做任何事情。你到底想达到什么目的?

标签: django templates block


【解决方案1】:

您的块在这里没有做任何事情,但是如果您希望某些内容出现在所有模板中,您必须在基本模板(base.html)中定义它并让其他块从它扩展:

base.html

Yor menu and the stuff you want to appear everywhere
{% block content %}{% endblock %}

另一个模板

{% extends "base.html" %}
{% block content %}
The actual content of the page
{% endblock %}

【讨论】:

    【解决方案2】:

    {% block FOO %}{% endblock %} 在子模板中保留要覆盖的空间。

    {% include "foo.html" %} 将另一个文件中的内容拉到当前文件中。

    要让 {% block navigation %}{% endblock %} 在每个页面上显示,您需要添加内容

    {% block navigation %}SHOW ME{% endblock %}
    

    【讨论】:

      【解决方案3】:

      您有静态导航栏,因此您可以在 base.html 页面中编写代码,然后在每个新页面上使用 {% extends 'base.html' %} 标签。您的标记将出现在每一页中。此外,如果您在子页面中仅使用扩展标签然后渲染它 - 您将看到 base.html 没有任何版本。

      如果您有代码,需要出现在几页上,而不是每个人上 - 创建“包含”目录,将代码保存在那里并使用{% include %} 标签扩展您的基本模板。它不会避免重复,但会使您的代码更短。

      还有你将来需要的最后一件事,也许是动态代码 - 缓存。使用{% cache %} 标签可以缓存块一段时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多