2011-09-21 172 views
0

好吧,这个完全是我的想法。Django模板继承

我有一个非常简单的_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)。它是如何显示相同页面的两个文件给出相同的确切源代码(根据浏览器),但是DISPLAY DIFFERENTLY。

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

P.S .:对不起,_base.html的代码对于论坛帖子有点长。我可能会稍微砍掉一点,但由于我不知道这里发生了什么事情,所以我不知道什么是重要的,什么不重要,所以我不想冒险。

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

+1

对不起,我不能使用您提供的代码重现此问题;似乎还有其他事情正在进行中。 –

+0

@Zach Snow:偶然,你使用的操作系统是什么?我在Windows上。 。 。这可能会有所作为吗? –

+0

不知道这是否会有所作为;我自己在OS X上。不幸的是,有很多东西可能会导致不同(不同的中间件,甚至不同的模板加载器等等)。 –

回答

0

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

你也试过查看清除所有浏览数据(饼干,缓存等...)的页面吗?

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

+0

是的,TEMPLATE_DIRS设置是正确的。但是,我从来没有想过要清除浏览器数据,所以我会去尝试一下。 。 。 –