Django 静态与用户上传的文件

ree*_*oid 6 django static collectstatic

在阅读了大量文档后,我仍然没有很好地掌握到底什么是静态文件与用户上传的文件......或者静态文件到底是什么。

1.静态文件

Django静态文件描述为“图像、javascript、css”之类的东西。好的,有道理。但是所有那些 .py 文件和 .html 模板文件等等……它们不是静态的??当站点运行时,它们不会“改变”。究竟什么是静态文件?“提供静态文件”是什么意思?这与“提供”“views.py”文件或“home.html”文件有何不同?

最重要的是,为什么我什至需要“collectstatic”?为什么我所有的静态文件都需要在一个地方?我想如果你使用一个单独的网络服务器来“服务”它们,那是有道理的......仍然,不确定这到底是什么意思。

另外,无论如何,“collectstatic”去哪里找到所有假定的静态文件?它会检查我的所有代码并查看我访问图像/javascript 文件的位置吗?

2. 用户上传的文件

假设我只是从表面上看这个静态的东西,如果用户上传图片会发生什么?我是否需要一个在后台不断运行“collectstatic”的程序?

Django媒体文件描述为管理用户上传内容的一种方式。老实说我还没有尝试过这个(现在会这样做),但这仍然代表一个问题:如果将所有“静态”文件放在一个地方如此重要,为什么突然可以不对用户这样做 -上传的文件?

这个“MEDIA_ROOT”目录中的文件不是由“collectstatic”收集的吗?如果我只是把我所有的图像/javascript/css 放到这个媒体文件夹中怎么办?然后什么都不收集?有什么问题吗?

感谢任何人对此的见解。

Oli*_*Oli 3

1

静态文件是 HTML 模板正确显示所需的一切 - CSS、JavaScript、图像、Flash 文件等。它们的处理方式有所不同,因为 Django 与它们没有任何特殊关系。(对于你的views.py,它必须在其中运行Python代码,对于模板,它需要渲染你使用过的任何模板标签等——对于静态资产,它们只需要“按原样”提供给用户)

collectstatic 命令将查找每个应用程序的“static”子目录,以及您在 STATICFILES_DIRS 设置中定义的任何其他目录。这意味着您的 Web 服务器(Apache、Nginx 等)只需要提供一个目录即可使您的所有资产可供用户使用,而不是每个单独应用程序的“静态”目录。

2

用户上传的文件不会被collectstatic命令收集——并且可以单独保存。你不想将你自己的 CSS/JS/图像等与它们混合在一起。

它们已经进入可由您的网络服务器提供服务的单个目录中,并且根本不需要定期收集。