2011-04-09 72 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