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