2011-04-09 92 views
3

我在Django中以開發模式提供靜態文件時遇到問題。我知道這不是應該在生產服務器中使用的設置,所以不要擔心。但現在我想堅持下去。在Django中爲開發模式提供靜態文件

settings.py的相關部分:

MEDIA_URL = '/media/' 
STATIC_URL = '/static/' 

MEDIA_ROOT = os.path.join(os.path.abspath(os.path.dirname(__file__) + '/..'), 'media') 
STATIC_ROOT = os.path.join(os.path.abspath(os.path.dirname(__file__) + '/..'), 'static') 

urls.py

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

所以靜態文件位於現在名爲static外面的項目文件夾的目錄。我確認STATIC_ROOT被評估爲適當的值。我仔細檢查過該文件夾是否存在。

但是,當我的瀏覽器指向地址localhost:8000/static/js/somefile.js時,我收到消息'js/somefile.js' could not be found.的可怕404 Page Not Found。你能否爲這種行爲提出一些理由?

在此先感謝。

編輯:

我想我知道問題可能是:事情是,在開發模式下的Django試圖尋找從STATIC_URL在所有安裝的應用程序的static/子目錄中的文件。但是我已經添加了一些額外的文件到我的STATIC_ROOT,這些都沒有提供。也許有一些衝突。

EDIT(2):

這必須是它。當我使用./manage.py runserver --nostatic運行服務器時,它的工作原理是,它實際上服務於STATIC_ROOT目錄中的文件。我能做些什麼呢?問題是,就像我試圖保持我的所有模板文件與項目本身分離一樣,我嘗試對某些css和js文件執行相同操作...

+0

在第一次編輯時,你會說「在開發模式下,Django試圖從所有安裝的應用程序的靜態/子目錄中的STATIC_URL中查找文件」,但這不完全正確,會發生什麼情況是運行manage.py collectstatic並將安裝的應用程序中的文件複製到STATIC_ROOT。如果您在使用--nostatic選項時能夠獲取文件,那麼您必須使用apache或其他東西在您的STATIC_URL上提供服務? – Anentropic 2012-03-30 03:30:57

回答

1

它不起作用,因爲我試圖做的不是很明智。

這就是它應該如何配置。 settings.py

MEDIA_URL = '/media/' 
STATIC_URL = '/static/' 

MEDIA_ROOT = 'media.mydomain.com' 
STATIC_ROOT = 'static.mydomain.com' 

STATIC_DIRS = (
    os.path.join(os.path.abspath(os.path.dirname(__file__) + '/..'), 'static'), 
) 

的所有文件留在原地,正是他們在那裏。

+7

MEDIA_ROOT和STATIC_ROOT在這裏是錯誤的......它們應該是文件路徑(在磁盤上)而不是域名。 – Anentropic 2012-03-30 03:27:06

+2

然後,你的意思是'STATICFILES_DIRS'而不是'STATIC_DIRS'? – Paolo 2012-06-12 20:00:41

0

我有類似的問題,媒體位置在我的urlconf根據this修復了我的問題。

+0

我會在一秒之內嘗試。問題是這是我想'static()'函數的確切內容。 – julkiewicz 2011-04-09 01:31:20

+0

是的,編輯它,重新加載和完全相同的效果。 – julkiewicz 2011-04-09 01:33:03

+0

可能是您的ADMIN_ROOT設置爲的問題?我認爲它必須設置爲與MEDIA_ROOT不同的內容。也許文件系統的權限問題?對不起,不是一個專家,我只是有一個類似的問題,花了一些時間試圖解決它。 – mrmagooey 2011-04-09 02:03:33