为什么使用Django的collectstatic而不是直接从静态目录提供文件?

Rya*_*zel 18 django

来自Django Docs:

部署django.contrib.staticfiles提供了一个便捷管理命令,用于在单个目录中收集静态文件,以便您可以轻松地为它们提供服务.

将STATIC_ROOT设置设置为您要为其提供这些文件的目录,例如:

STATIC_ROOT = "/var/www/example.com/static/" 
Run Code Online (Sandbox Code Playgroud)

运行collectstatic管理命令:

$ python manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)

这会将静态文件夹中的所有文件复制到STATIC_ROOT目录中.

使用您选择的Web服务器来提供文件.部署静态文件涵盖了静态文件的一些常见部署策略.

复制文件的目的是什么,为什么不从它们在应用程序中存在的目录中提供它们?

sk1*_*k1p 24

为什么不只是为您的static目录服务?您可能会使用多个应用,并且您的某些应用可能不在您的控制之下.在staticfiles应用程序存在之前,您必须手动将所有应用程序的静态文件复制到公共目录,将它们上载到CDN,或将它们符号链接到Web服务器的文档根目录.

staticfiles应用程序建立了一个约定:为static目录下的每个应用程序放置静态文件,让Django为您完成工作.


hel*_*ate 11

STATIC_ROOT可以在与应用程序不同的计算机上,因此将静态文件复制到静态根目录意味着您可以从不同的服务器(CDN FTW!)提供静态文件,如果这些文件位于哪里,您将无法做到这一点仅位于各自的应用程序目录中.