处理Django中的静态文件

时间:2014-04-09 05:32:54

标签: python django

目前我的settings.py关于设置的静态文件

STATIC_ROOT = ''

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

STATICFILES_DIR = (
    os.path.join(BASE_DIR, 'static'),
    )

STATIC_URL = '/static/'

通过阅读文档和各种博客,我的理解是STATIC_ROOT是静态文件的所在。它是collectstatic将收集用于部署的静态文件(OUTPUT)的目录的绝对路径。我不知道该把这个值作为什么

对于STATICFILES_DIR此设置定义了在启用FileSystemFinder finder时静态文件应用程序将遍历的其他位置。所以我需要STATICFILES_FINDER中的settings.py字段,并且在该字段中

('django.contrib.staticfiles.finders.FileSystemFinder',
 'django.contrib.staticfiles.finders.AppDirectoriesFinder')

但是,默认STATICFILES_DIR未包含在我的settings.py中,因此我将其添加进来。

对于STATIC_URL,引用位于STATIC_ROOT中的静态文件时使用的URL。我只是把它作为默认设置,因为我不确定如何编辑它。

我不知道如何编辑有关静态文件的settings.py,以便将它们显示在网页上。将静态文件包含到网页中的“最佳实践”方法是什么?

ex:{% static "static/css/default.css" %}

我也读了一些关于命名空间的内容,但我也对此感到困惑

例如:

STATICFILES_DIR = (
    ("asserts",  os.path.join(BASE_DIR, 'static')),
    )

1 个答案:

答案 0 :(得分:1)

最佳做法是将每个应用程序的静态文件保存在自己的“静态”目录中,并在每次静态文件更改时运行manage.py collect_static

然后,如果您使用默认存储,您的文件将被复制到STATIC_ROOT目录中。 (但您可以使用自定义存储,例如在Amazon S3云上存储静态文件)

最后,STATIC_URL定义了如何从外部访问静态文件。在django dev服务器的情况下 - 它有静态文件应用程序,它在STATIC_URL位置下提供服务。对于生产服务器,您肯定希望使用nginx / apache或amazon S3 / cloudfront(或其他云服务)提供静态文件。如果你使用nginx / apache,你必须设置STATIC_URL,这样{% static "static/css/default.css" %}将被替换为相对于STATIC_ROOT的url,同时你应该在nginx / apache设置中覆盖这个STATIC_URL位置,所以当最终用户尝试访问它,它获得静态文件服务甚至没有触摸django。在自定义存储的情况下 - 此存储可能提供它自己的URL(对于前面的S3云)。