2011-09-29 47 views

回答

7

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

1)它允许第三方应用程序以标准方式轻松包含静态文件。不再需要从您的web服务器目录创建符号链接到各个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 /”将作为所有静态介质URL的前缀。你也将在你的模板中使用这个变量。例如,在你的模板,你可以指定类似:其中静态文件复制到

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

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

虽然静态媒体有很多种服务方式,但我认为这是Django设置的一个很好的API,它有助于更​​好地集成第三方模块。这个特征现在被包含在核心中的事实可以表明这种方法可能获得了一些动力。

希望这有助于 乔