我在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