2011-06-21 123 views
1

我有幾個自定義樣式表,它們會覆蓋默認的管理樣式。他們住在myproject/static/admin/css-extended。我用覆蓋「myproject/templates/admin」中的模板覆蓋了Django的幾個默認管理模板。Django自定義樣式表(1.3)admin

在我的樣式表引用的模板中:{{ STATIC_URL }}/admin/css-extended/[stylesheet].css

但是,我不能讓自定義樣式表通過。

我得在settings.py以下網址相關的設置:

MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media') 
MEDIA_URL = '/media/' 
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static') 
STATIC_URL = '/static/' 
ADMIN_MEDIA_PREFIX = '/static/admin/' 

我有下面列出的模板context處理器:

'django.core.context_processors.media', 
'django.core.context_processors.static', 

誰能幫助嗎?

感謝

UPDATE:

我懷疑這個問題有事情做的事實,我ADMIN_MEDIA_PREFIX相同的CSS擴展URL('/static/admin')的第一部分。我猜Django試圖在覈心管理員中找到一個名爲'css-extended'的目錄,而不是項目本身。但是,我該如何解決這個問題?

回答

1

你在本地開發環境(使用runserver)時是否遇到了這個問題?如果是這樣,你的urls.py中有以下內容嗎?

from django.contrib.staticfiles.urls import staticfiles_urlpatterns 

# ... the rest of your URLconf goes here ... 

urlpatterns += staticfiles_urlpatterns() 

閱讀Django Docs瞭解更多。

+0

是的,我使用的是runserver。根據您提到的文檔,只需要添加這些額外的行,如果您使用內置開發服務器以外的其他軟件提供靜態文件。 – user166508

+0

好點。您是否查看了頁面源代碼,以瞭解{{STATIC_URL}}如何在模板中呈現? –

+0

是的,'/靜態/'。 – user166508

1

好吧,我現在想我知道這裏發生了什麼。希望這將闡明:

STATIC_ROOT僅由「collectstatic」管理命令使用,以確定將其收集的靜態文件轉儲到何處。

STATIC_URL被dev服務器用來定義靜態文件將被提供的URL。

您尚未設置的STATICFILES_DIRS被dev服務器和「collectstatic」管理命令用於標識要提供服務的靜態文件的位置。在開發服務器的情況下,這些文件直接就地提供。在管理命令的情況下,文件被收集並複製到STATIC_ROOT中。

[注:這裏有一個約定 - 如果你在你的應用程序(而不是項目)有/靜態子目錄,他們會在STATICFILES_DIRS明確定義什麼一起拿起]

你只需要將以下內容添加到settings.py:

STATICFILES_DIRS = { 
     '/absolute/path/to/myproject/static/', 
} 
+0

我已經試過了。它會引發以下錯誤:'錯誤配置:STATICFILES_DIRS設置不應包含STATIC_ROOT設置'。 – user166508

+0

啊,解決了!我只是將STATIC_ROOT的值更改爲'absolute/path/to/myproject/staticfiles',而不是'absolute/path/to/myproject/static',以避免該錯誤。據推測,STATIC_ROOT的目錄名稱可以是任何你喜歡的...(我還沒有在生產服務器上測試過它)? – user166508

+0

如果我理解它是正確的(只需一個星期使用Django,所以我很抱歉,如果我錯了),STATIC_ROOT路徑只是一個絕對路徑,當您從manage.py運行命令時,靜態文件將到達的位置,而不是靜態文件目錄本身。在STATIC_ROOT配置行之上的註釋確實如此,您甚至不應該將自己的任何文件放在該目錄中,因爲它是爲「collectstatic」管理功能收集的文件保留的 –