目前在Django中提供静态文件的最佳做法是什么?

时间:2011-09-29 04:27:07

标签: django django-templates

我发现了很多关于如何在Django 1.x中处理静态文件的建议。是否有最佳实践方法可以这样做?

1 个答案:

答案 0 :(得分:7)

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

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

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

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

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

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

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

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

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

    <img src="{{ STATIC_URL }}logo.png">

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

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

希望这有帮助, 乔