2011-02-04 237 views
11

我在Ubuntu 10.10上使用Django 1.2.4。我試圖覆蓋管理模塊的index.html模板。我一直在關注這些instructions。我也看過這question,但我仍然有困難。難度覆蓋Django管理模板

的說明說,在模板目錄下創建一個目錄admin

templates/ 
    admin/ 
     index.html 

我想覆蓋在index.html單塊。 (真的,我想要做的是一些文本追加到尾部難道還有比副本更簡單的方法/粘貼整個塊和改變它。?)(更新:看起來像{{block.super}}可能有幫助。)

要我正在重寫信號,我把這個在我index.html的頂部:

{% extends "admin/index.html" %} 

當然,這導致堆棧溢出(從終端):

Exception RuntimeError: 'maximum recursion depth exceeded in __subclasscheck__' in <type 'exceptions.RuntimeError'> ignored 

什麼是正確的如何做到這一點?我在鏈接問題上對每個答案嘗試了一個符號鏈接,但導致如下結果:

[email protected]:~/foo$ sudo ln -s /usr/local/lib/python2.6/dist-packages/django/contrib/admin/templates/ django_admin 
[sudo] password for me: 
ln: creating symbolic link `django_admin': Protocol error 

我在做什麼錯?

回答

1

不知道,如果你找到了答案,但你需要改變

{% extends "admin/index.html" %} 

{% extends "admin/base_site.html" %} 

因爲這是原始的index.html頁覆蓋什麼。由於Django系統在使用默認管理模板文件夾之前先搜索模板文件夾,因此在這種情況下,它會在您的模板中找到admin/index.html,然後嘗試使用extend擴展(因此遞歸錯誤)。

僅供參考,您也可以在自己的模板中自定義base_site.html,它可以擴展爲base.html。做的最好的事情是從複製原始:

/usr/local/lib/python2.6/dist-packages/django/contrib/admin/templates/ 

,並貼到您的模板文件夾爲起點

13

遞歸錯誤是因爲你延長admin/index.html自身。

您可以:

  • 複製整個admin/index.html模板在templates/admin/目錄,它會與你替換默認模板
  • 覆蓋的index.html每個應用或模型,解釋here

我知道這是問題後,但你知道,谷歌旅行...

7

修改設置。PY一個額外的模板文件夾,例如:

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
    "/home/mysite/webapps/django/myproject/templates", 
    "/home/mysite/webapps/django/lib/python2.7/django/", # extra folder 
) 

然後在myproject的/模板/管理員添加自己喜歡的index.html:

{% extends "contrib/admin/templates/admin/index.html" %} 

{% block branding %} 
    <h1 id="site-name">Administration for TheLittleButtonCo</h1> 
{% endblock %} 

變化是可能的,很明顯。這適用於Django的1.3.1最終

+0

乾淨的解決方案! – 2012-05-24 08:13:30