在Django中为开发模式提供静态文件

时间:2011-04-09 01:21:03

标签: django http-status-code-404

我在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文件执行相同操作...

2 个答案:

答案 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中添加了对媒体位置的显式引用,为我解决了这个问题。