Skip to main content
 首页 » 编程设计

python之在 Django 中处理静态文件

2025年05月04日22lyj

目前我的 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 查找器,此设置定义了静态文件应用程序将遍历的其他位置。所以我需要在我的 settings.py 中有一个 STATICFILES_FINDER 字段,并且在该字段中将是

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

但是,默认情况下 STATICFILES_DIR 不包含在我的 settings.py 中,所以我将其添加进去。

STATIC_URL 是引用位于 STATIC_ROOT 中的静态文件时使用的 URL。我只是将其保留为默认设置,因为我不确定如何对其进行编辑。

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

例如:{% static "static/css/default.css"%}

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

例如:

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

请您参考如下方法:

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

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

最后,STATIC_URL 定义了如何从外部访问您的静态文件。在 django 开发服务器的情况下——它有静态文件应用程序,在 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 云)。