django从文件导入模板

时间:2014-02-14 07:48:13

标签: python html django

我有3个页面,所有这些页面都在每个html文件的顶部都有相同的菜单。

菜单中有很多标签,当我想修改标签中的所有链接时,我遇到了问题。

我想在其他名为menu.txt的文件中编写菜单,并使用模板加载menu.txt,然后将菜单与页面的其他部分组合。

有没有效率的方法呢?

除了在view.py中加载页面并将值传递给模板。

谢谢。

2 个答案:

答案 0 :(得分:10)

在模板文件中使用include。请参阅docs

实施例

{% extends 'base.html' %}
{% block content %}
{% include 'includes/menu.html' %}
<h1>Hello World</h1>
<!-- ... -->
{% endblock content %}

答案 1 :(得分:2)

模板继承

Django模板引擎中最强大的 - 也是最复杂的 - 部分是模板继承。模板继承允许您构建一个基础“框架”模板,其中包含您网站的所有常见元素,并定义子模板可以覆盖的块。

最简单的方法是从示例开始理解模板继承:

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}My amazing site{% endblock %}</title>
</head>

<body>
    <div id="sidebar">
        {% block sidebar %}
        <ul>
            <li><a href="/">Home</a></li>
            <li><a href="/blog/">Blog</a></li>
        </ul>
        {% endblock %}
    </div>

    <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

此模板(我们称之为base.html)定义了一个简单的HTML框架文档,您可以将其用于简单的双列页面。 “子”模板的工作是用内容填充空块。

在此示例中,块标记定义了子模板可以填充的三个块。所有块标记的作用是告诉模板引擎子模板可以覆盖模板的那些部分。

子模板可能如下所示:

{% extends "base.html" %}
{% block title %}My amazing blog{% endblock %}
{% block content %}
{% for entry in blog_entries %}
    <h2>{{ entry.title }}</h2>
    <p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}

extends标签是这里的关键。它告诉模板引擎该模板“扩展”另一个模板。当模板系统评估此模板时,首先它会找到父模板 - 在本例中为“base.html”。

你可以参考每个html页面上的扩展commom部分

http://www.webforefront.com/django/createreusabledjangotemplates.html