2011-09-21 173 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設置是正確的。但是,我從來沒有想過要清除瀏覽器數據,所以我會去嘗試一下。 。 。 –