Django:如何在广泛的网站中加入?

时间:2011-08-13 22:43:12

标签: django templates block

道歉,这是非常基本的。我已经将静态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的子模板并将其添加到它们中,如果可能的话。

3 个答案:

答案 0 :(得分:2)

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

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

最后你需要的东西,可能是动态代码 - 缓存。使用{% cache %}标记,您可以缓存一段时间。

答案 1 :(得分:0)

您的块在此处没有执行任何操作,但如果您希望在所有模板中显示某些内容,则必须在基本模板(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 :(得分:0)

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

{%include“foo.html”%}将其他文件中的内容提取到当前文件中。

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

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