【问题标题】:Why use Django's collectstatic instead of just serving the files directly from your static directory?为什么使用 Django 的 collectstatic 而不是直接从静态目录提供文件?
【发布时间】:2014-01-10 12:10:39
【问题描述】:

来自 Django 文档:

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

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

STATIC_ROOT = "/var/www/example.com/static/" 

运行collectstatic管理命令:

$ python manage.py collectstatic

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

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

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

【问题讨论】:

    标签: django


    【解决方案1】:

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

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

    【讨论】:

    • 也许我从来没有使用过需要它的应用程序(除了管理员)。所以在我不需要的情况下,直接从静态目录提供静态文件有什么问题吗?
    • 如果您想坚持最佳实践,请使用 staticfiles 应用程序。我只会为非常小的项目直接提供静态文件,即便如此,最好还是“养成正确做事的习惯”
    • IIRC,它们位于每个应用程序的不同位置,您必须遵循应用程序的安装说明才能使用静态文件,例如使路径 X 处的静态文件在 URL Y 处可用
    【解决方案2】:

    STATIC_ROOT 可以与应用程序位于不同的计算机上,因此将静态文件复制到静态根目录意味着您可以从不同的服务器(CDN FTW!)提供静态文件,而这是您无法做到的如果这些文件仅位于其各自的应用程序目录中,请执行此操作。

    【讨论】:

    • 这是最好的答案;人们不应该为了自己的利益而推荐使用 staticfiles/collectstatic;这就是它的意义所在。
    • 您的意思是 STATIC_ROOT 还是 STATIC_URL?我会假设后者,因为如果它是不同的服务器,那么文件将使用 URL 提供。如果我错了,请纠正我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 2020-04-18
    • 2014-10-27
    • 1970-01-01
    • 2021-09-30
    • 2014-02-11
    • 2013-01-06
    相关资源
    最近更新 更多