django - 目前在 Django 中提供静态文件的最佳实践是什么

标签 django django-templates

我找到了很多关于如何在 Django 1.x 中处理静态文件的建议。是否有最佳实践方法来做到这一点?

最佳答案

在 Django 中提供静态文件可能有多种方法,但 Django 1.3 引入了一个新选项来处理它们。基本上,您可以在项目级别或包含静态媒体的应用级别定义特定目录。然后通过管理命令“collectstatic”,您可以将项目目录中的所有静态文件复制到由您的网络服务器提供服务的单独目录(可能在您的项目外部)。这解决了以前方法的许多复杂性。

1) 它允许第 3 方应用程序以标准方式轻松包含静态文件。不再需要从您的网络服务器目录创建符号链接(symbolic link)到各个 python/django 模块内的位置。

2) 它使您可以更好地控制网络服务器可以托管其静态文件的位置。例如,您可以在版本控制下定义项目内部的所有静态媒体,然后将其全部复制到文件系统上任何位置的外部位置。这样可以避免将您的网络服务器指向项目内部的某个位置。

3) 将永远不会改变的静态媒体与用户使用 FileField 之类的东西上传的静态媒体分开。这很好,因为您可能希望将站点级静态媒体保留在版本控制中(安装在您的开发服务器上),但用户提交的内容将上传到不同的目录(与 1.3 之前的 django 版本不同)。

我认为此功能曾经是合并到核心中的第 3 方模块。

以下是文档:
https://docs.djangoproject.com/en/dev/howto/static-files/

基本上有一些新的 settings.py 变量:

STATIC_ROOT - 这是您的文件系统上的一个目录,将由您的网络服务器提供服务。当您运行 ./manage.py collectstatic 时,您的项目及其应用程序中的所有静态文件都将被复制到您在此处指定的目录中。

STATIC_URL - 这是您将设置的 url,以表示您的内容将基于哪个 url 基础。如果将此值设置为“/static/”,则“/static/”将作为包含的所有静态媒体 URL 的前缀。您还将在模板中使用此变量。例如,在您的模板中,您可以指定如下内容:



STATIC_ROOT 设置变量指定静态文件复制到的位置,但您还需要提供静态文件的复制位置。这可以通过在您的各个 Django 应用程序中创建一个名为“static//”的目录来完成,类似于您为应用程序中的模板所做的事情。运行 collectstatic 命令后,Django 会将所有应用程序中所有“static/”目录中的所有静态文件复制到 STATIC_ROOT 目录。您还可以使用 STATICFILES_DIRS 设置变量来定义项目级目录以从中复制静态媒体。

虽然有很多方法可以提供静态媒体,但我认为这是 Django 设置的一个很好的 api,它将有助于更好地集成 3rd 方模块。这个特性现在包含在核心中的事实可能表明这种方法可能已经获得了一些动力。

希望这可以帮助,

关于django - 目前在 Django 中提供静态文件的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7592448/

相关文章:

django - 测试模板中是否存在模板 block

django - 使用 django 使用 latex 代码响应 Web 请求

python - Django - 来自模板标签内变量的字符串

python - 在 Django 中渲染模板变量时出现问题

django - 高效删除 Django 中孤立的 m2m 对象/标签

python - 我应该使用哪些类来修改没有使用 Django 表单和 UpdateView 的对象?

python - Django 映射到 Postgres citext 数组返回一个 str 而不是一个列表

python - S3 上的 Django collectstatic 每次在 Heroku 上上传未更改的文件

python - 使用 BeautifulSoup 写入文件时在 Django 模板中保留空格

python - 为什么 Django 不渲染我的 block 内容或识别登录用户?