我在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
时,我会收到带有消息404 Page Not Found
的可怕'js/somefile.js' could not be found.
。你能否就这种行为提出一些理由?
提前致谢。
修改
我想我知道问题出在哪里:问题是在开发模式下,Django会尝试从所有已安装应用的STATIC_URL
子目录中的static/
中查找文件。但是我已经在STATIC_ROOT
添加了一些额外的文件,而这些文件根本没有提供。也许有一些冲突。
编辑(2):
必须如此。当我使用./manage.py runserver --nostatic
运行服务器时,它可以正常工作,即它实际上提供来自STATIC_ROOT
目录的文件。我能做些什么呢?问题是,当我尝试将所有模板文件与项目本身分开时,我尝试对某些css和js文件执行相同操作...
答案 0 :(得分: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'),
)
所有文件都保留在原位,确切位置。
答案 1 :(得分:0)
我遇到了类似的问题,根据this在我的urlconf中添加了对媒体位置的显式引用,为我解决了这个问题。