我有两个名为media
和static
的目录。
当我DEBUG = True
时,一切正常,但如果我将其更改为DEBUG = False
则会出现问题。
我读过我的服务器将处理生产中的静态文件。我理解为
在开发中,将所有静态文件放在我的目录static
中都没关系,但是当我开始生产时,我需要将所有静态文件移动到另一个目录(它可能是static_www
?)和在启动服务器之前,我运行python manage.py collectstatic
。此命令会将所有文件从static_www
移动到static
,一切正常。
但为什么我需要有两个具有相同内容的独立目录?服务器如何知道我的文件已经通过collectstatic
收集了(它只是文件夹中的文件,所以它如何知道差异)?我猜collectstatic
主要用于多个目录中的静态文件,并希望在投入生产之前将它们全部收集起来。
settings.py
中的变量如下所示:
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static_www"),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
MEDIA_URL = '/media/'
它从static_www
移动到static
,因此在生产和开发中都没有使用我的目录static_www
。
也许所有这些设置都适用于只有另一台服务器用于处理静态文件的网站?
答案 0 :(得分:0)
STATIC_ROOT
是STATIC_URL
的虚拟目录指向的地方。
示例:
STATIC_ROOT = '/var/www/example.com/static/'
STATIC_URL = 'http://www.example.com/static/'
collectstatic
会在STATICFILES_DIR
中找到所有静态文件并复制到STATIC_ROOT
。
Django会处理http://www.example.com/static/file.jpg
的请求,并会提供/var/www/example.com/static/file.jpg
。
您可以使用以下内容将静态文件设置为其他网站:
STATIC_ROOT = '/var/www/static.example.com/static/'
STATIC_URL = 'http://static.example.com/static/'
通过这种方式,static.example.com
可以是一个简单的服务器,它将在不受Django处理的情况下提供文件,从而提高网站性能。或者您可以上传到像Amazon S3(和CloudFront)等CDN