Django模板继承

时间:2011-09-21 23:44:20

标签: django django-templates

好的,这个完全是我的想法。

我有一个非常简单的_base.html,其代码如下:

<!DOCTYPE html />
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
    {% load static %}

    <title>Welcome!</title>

    <!-- Includes jQuery UI -->
    <script type='application/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'></script>
    <script type='application/javascript' src='https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js'></script>
    <link rel='stylesheet' href='https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/themes/cupertino/jquery-ui.css' type='text/css' media='screen' />

    <!-- Includes Columnal -->
    <link rel='stylesheet' href='{% get_static_prefix %}Columnal/columnal.css' type='text/css' media='screen' />

    <!-- Custom CSS -->
    <link rel='stylesheet' type='text/css' href='{% get_static_prefix %}Style.css' />

    {% block head %}
    {% endblock %}
</head>

<body>
    <header>
        <table width='100%'>
            <tr>
                {% if user.is_authenticated %}
                    <td>Welcome, {{user.username}}!</td>
                    <td align='right'><a href='logout/'>Logout</a></td>
                {% else %}
                    <td><a href='login/'>Login / Register</a></td>
                {% endif %}
            </tr>
        </table>
    </header>

{% block content %}
{% endblock %}

</body>
</html>

当然,虽然打算通过子模板进行扩展,但这个页面本身确实有意义,实际上,在渲染时,我会看到我期望的和我想要的东西。

但是,当我尝试使用子模板扩展此文件时,我得到了一些意想不到的结果,所以我尝试将其降低到绝对最低限度,即:

{% extends '_base.html' %}

只需一行代码。有人会认为,如果我显示这个文件,我会得到完全相同的结果,如果我只是显示_base.html本身。但是,并非如此。出于某种原因,当我使用这个简单的子模板时,在标题上方有一条额外的白线虚无。甚至更奇怪的是,如果我选择两个页面的查看源(即,我直接从_base.html获得的页面和我从子模板获得的页面),它说源代码完全是相同的(我是使用Chrome)。如何显示同一页面的两个文件提供相同的确切源代码(根据浏览器),但显示不同。

这完全打击了我的脑海,我不知道是什么原因造成的。我理解它的方式,Django在幕后做了这件事并向浏览器提供原始HTML文件,因此浏览器不应该关心我如何生成HTML,只要它是相同的。那么这两种方法怎么会产生不同的结果呢?任何帮助都会非常感激,因为我在过去两天一直坚持这一点。

P.S。:很抱歉_base.html的代码对论坛帖子来说有点长。我可能已经切断了一点,但由于我不知道这里发生了什么,我真的不知道什么是重要的,什么不重要,所以我不想承担风险。

编辑:正如我之前提到的,(在Chrome中)如果我右键单击并为两个页面选择“查看页面源”,我会得到完全相同的源代码。但是,如果我选择'Inspect element',源代码就不一样了。出于某种原因,当使用子模板版本通过“Inspect element”查看源代码时,我发现_base.html的<head>标记中的所有内容都位于源代码的<body>标记中我看到的代码。知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

您是否在settings.py的TEMPLATE_DIRS中指定了模板目录的正确路径。 ?

您是否也尝试查看清除所有浏览数据(Cookie,缓存等)的页面?

可能是浏览器在幕后缓存数据..