Jinja {%extends%}

时间:2016-04-19 14:43:14

标签: html django jinja2

好的,我有第一个HTML文件(header.html):

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>M4A</title>
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'css/header.css' %}" />
<link rel="icon" href="../../static/image/logo.png">
</head>
<body class="body" style="background-color:#f9f9f9">
{% block content %}
    <ul>
        <li><a href="/"><img src="../../static/image/logoRect.png" width="25"> </a></li>
        <li><a href="/movies">Movies</a></li>
        <li><a class="left" href="">Search</a></li>
        <li><a class="left" href="/profile/">Profile</a></li>
        <li><a class="left" href="#about">Explore</a></li>
    </ul>
{% endblock %}
</body>
</html>

然后我有另外一个(home.html):

{% extends "START/header.html" %}

{% block content %}

<p> TEST</p> <!-- for example -->

{% endblock %}

但是当运行第二个时它并没有真正扩展,它看起来像是替换了另一个HTML文件正文的内容。背景颜色仍然是我的CSS文件中的那个,所以我确定它正在阅读它。我错过了什么?

3 个答案:

答案 0 :(得分:1)

当您在home.html中的header.html

中使用相同的块标记时,您正在替换正文
{% block content %}

如果您不想替换它,则应使用其他名称。

此外,您可以使用:

{{ block.super() }}

如果要扩展块内容数据,请注意它与扩展模板不同。

答案 1 :(得分:1)

我不清楚你的期望是什么。

Jinja documentation about templates非常清楚块的作用:

  

所有block标记都告诉模板引擎子模板可以覆盖模板中的那些占位符。

在您的示例中,基本模板(header.html)具有内容块的默认值,即该块内的所有内容。通过在home.html中设置一个值,您用另一个块覆盖该默认值。

如果您想在导航菜单下添加内容,只需将模板修改为以下内容:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>M4A</title>
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'css/header.css' %}" />
<link rel="icon" href="../../static/image/logo.png">
</head>
<body class="body" style="background-color:#f9f9f9">
    <ul>
    <li><a href="/"><img src="../../static/image/logoRect.png" width="25"> </a></li>
    <li><a href="/movies">Movies</a></li>
    <li><a class="left" href="">Search</a></li>
    <li><a class="left" href="/profile/">Profile</a></li>
    <li><a class="left" href="#about">Explore</a></li>
</ul>
{% block content %}<p>This will appear if you don't set a block in the inheriting template.</p>{% endblock %}
</body>
</html>

答案 2 :(得分:0)

    <!DOCTYPE html>
    <html lang="en">

    <head>
    <meta charset="UTF-8">
    <title>M4A</title>
    {% load staticfiles %}
    <link rel="stylesheet" type="text/css" href="{% static 'css/header.css' %}" />
    <link rel="icon" href="../../static/image/logo.png">
    </head>

    {% block content %}
     <body class="body" style="background-color:#f9f9f9">
        <ul>
            <li><a href="/"><img src="../../static/image/logoRect.png" width="25"> </a></li>
            <li><a href="/movies">Movies</a></li>
            <li><a class="left" href="">Search</a></li>
            <li><a class="left" href="/profile/">Profile</a></li>
            <li><a class="left" href="#about">Explore</a></li>
        </ul>
     </body>
    {% endblock %}

    </html>

让身体进入阻挡并改变身体背景

{% extends "START/header.html" %}

{% block content %}
<body class="body" style="background-color:#f23d49">
    <p> TEST</p> <!-- for example -->
</body>
{% endblock %}