[英]Handle static files in production in Django
我有兩個目錄,分別稱為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
。
也許所有這些設置都針對那些僅具有用於處理靜態文件的服務器的網站?
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處理,因此可以提供文件,從而提高了網站性能。 或者,您可以上傳到CDN,例如Amazon S3(和CloudFront)等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.