2012-08-03 42 views
15

我一直在試圖讓Django的管理頁面的自定義模板工作,但一直不成功。我已經閱讀了django文檔和幾個博客,這些博客解釋爲這是一個簡單的步驟,我認爲這是一個很簡單的步驟。自定義Django管理模板不起作用

截至目前管理頁面的作品,但我自己重寫的CSS或模板不起作用。我的設置如下

/project_folder/ 
     manage.py 
     settings.py 
     urls.py 
     __init__.py 
     /app/ 
      views.py 
      models.py 
      __init__.py 
      /templates/ 
       /admin/ 
        base_site.html 

在urls.py我

(r'^admin/', include(admin.site.urls)), 

,因爲我無法登錄等,所以我假設的/admin/base_site.html將覆蓋默認的其中一期工程但它沒有做一件事。

任何人都知道這裏發生了什麼?我從Django的教程/指南開始跟蹤它,並進入一些博客,看看他們是否有答案,但他們都說了同樣的事情。

編輯1: 我確實有我的模板目錄設置。

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH, 'templates/'), 
) 

這正常工作,因爲我有我的網站與媒體目錄工作CSS等,唯一不似乎在「接受」模板的其餘部分是管理部分。

+2

但這似乎並不像你有正確的模板路徑。你有項目/模板,但是你的結構將其顯示爲項目/應用/模板。 – 2012-08-03 10:45:20

回答

24

好吧我修好了,這是一個愚蠢的錯誤,但我已經玩了過去2個小時。我必須在django.contrib.admin之前聲明我的應用程序。否則它不會接受。

+2

只是FYI我現在正在通過教程現在與Django 1.6.5,我不必這樣做的工作。 – liquidki 2014-08-16 22:51:04

+2

很高興看到我不是唯一有這個問題的人(顯然至少有15人)。使用Django 1.10,文檔會說你喜歡自定義加載器,改變你的目錄順序 - 但沒有關於應用程序本身。 – 2016-10-25 13:05:43

4

確保您已將TEMPLATE_DIRS設置爲settings.py到正確的文件夾!

+0

我有,添加到我的主要職位,但好的提示無論如何。 – Yonathan 2012-08-03 10:37:48

+1

我發現我的問題是違反了默認模板(重命名爲base_site.htmlx),錯誤頁面顯示我的模板文件夾位於錯誤的位置。 – ed209 2015-02-05 22:08:04

6

我無法在Django教程的第二部分中做this step時識別管理模板。

這是我如何解決它:

this answer使用信息,我打印的TEMPLATE_DIRS值:

  1. 在命令行中,導航到該項目的settings.py文件所在目錄(對我來說這是R:\jeffy\programming\sandbox\python\django\tutorial\mysite\mysite\
  2. 啓動交互式shell:python
  3. >>> import settings
  4. >>> settings.TEMPLATE_DIRS,其輸出['R:\\jeffy\\programming\\sandbox\\python\\django\\tutorial\\mysite\\templates']

因此,這是該項目的模板目錄的預期位置。 admin目錄進入該目錄,base_site.html文件進入該目錄。

我的另一個問題是它工作,但我只改變了<TITLE>字段,所以我只是沒有注意到它。 (我以爲我正在改變主標題。)

+1

「管理員目錄進入該」< - 這。容易忽略。我把這些文件直接放在模板中,並不知道它爲什麼不起作用... – mmdanziger 2014-07-31 12:15:29

+0

我還將頂級目錄'mysite'以及我的app目錄'mysite'命名爲,所以當我打印TEMPLATE_DIRS和它時給了''/ Users/username/dev/code/mysite/templates',我讀得太快了,以爲我做得對,但我沒有像'.../ code/mysite/mysite/templates' – liquidki 2014-08-16 22:55:48

+1

一個側面說明,'import settings'不適用於我,但是來自mysite import settings'。 – jeff 2015-02-13 14:59:40

17

在此練習中應該抵制的另一個錯誤。練習說改變這個...

<h1 id="site-name"><a href="{% url 'admin:index' %}"> {{ site_header|default:_('Django administration') }} </a></h1> 

這個...

<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1> 

有一種誘惑,只改變字符串常量,但那是不正確。即不這樣做,它不會改變標題:

<h1 id="site-name"><a href="{% url 'admin:index' %}"> {{ site_header|default:_('Polls Administration') }} </a></h1> 

這是我犯的錯,我不得不去通過鍛鍊精心修復它。

+0

我們必須在文件'Projects/mysite/templates/admin/base_site.html'上執行此操作嗎? – jeff 2015-02-13 14:47:22

+1

@halilpazarlama是的,如果你正在按照教程在https://docs.djangoproject.com/en/1.7/intro/tutorial02/ – Rooster 2015-03-03 20:45:36

3

我在Django 1.6.5教程(https://docs.djangoproject.com/en/1.8/intro/tutorial02/)中遇到了同樣的問題,但是認識到這是一個錯誤,沒有仔細閱讀。本教程使用了,你要做的就是把你的settings.py這樣的:

TEMPLATES = [ 
    { 
     ... 
    'DIRS': [os.path.join(BASE_DIR, 'templates')], 
     ... 
    } 

我然後把我想放倍率爲應用程序下的管理網站模板文件夾就像你的例子:

/project_folder/ 
     manage.py 
     settings.py 
     urls.py 
     __init__.py 
     /app/ 
      views.py 
      models.py 
      __init__.py 
      /templates/ 
       /admin/ 
        base_site.html 

由於這個原因與Daniel Roseman在其中一條評論中提到的問題類似,我的DIR評估爲project_folder/templates(正如我告訴的)。然後,我在本教程中注意到了這一點明確表示把templates/admin文件夾在項目層面,而不是應用程序級別:

在項目中創建目錄模板目錄(包含manage.py的一個)。模板可以存放在Django可以訪問的文件系統的任何位置。 (Django以你的服務器運行的任何用戶身份運行。)但是,將模板保留在項目中是一個很好的約定。

通過這樣做,我有以下結構:

/project_folder/ 
     manage.py 
     settings.py 
     urls.py 
     __init__.py 
     /templates/ 
      /admin/ 
       base_site.html 
     /app/ 
      views.py 
      models.py 
      __init__.py 

這樣,一切都按預期(我可能會覆蓋在管理頁面默認的Django模板)。

雖然你應該能夠把模板的任何地方,並配置Django的找到他們,這似乎是有道理的把你的主要管理模板在項目層面,作爲管理站點不是APP特異性,但可用於整個項目。

+0

我可以確認我有同樣的問題,並忘記添加settings.DIRS模板的路徑location.I很難找出,因爲在另一個項目(但與Django 1.9)路徑設置,仍然沒有工作,在這種情況下,因爲{{site_header |默認:_('內容管理接口')}}需要用簡單的文字替代。 – 2017-10-03 19:36:54