在 django 中同时使用项目级和应用级静态文件

Posted

技术标签:

【中文标题】在 django 中同时使用项目级和应用级静态文件【英文标题】:Using both the project level and the app level static files in django 【发布时间】:2018-07-15 05:07:43 【问题描述】:

我有一些静态文件将在所有应用程序中保持通用,我也有一些静态文件特定于某些特定应用程序。现在在我的一个应用程序中,我想同时使用项目级别和应用程序级别的静态文件,但这似乎不起作用。 以下代码部分来自 settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "homepage","static"),
    os.path.join(BASE_DIR, "landing_page","static"),
    os.path.join(BASE_DIR, "static"),
]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

我使用了python manage.py collectstatic ,它返回一个警告,类似于找到另一个目标路径为“homepage\css\style.css”的文件。它将被忽略,因为只收集第一个遇到的文件。如果这不是您想要的,请确保 每个静态文件都有唯一的路径。 尽管有上述警告,我仍然在我的根目录的 staticfiles 文件夹中获得项目级别和应用级别的静态文件。当我在模板中使用它时,会加载项目级静态文件,而不会加载应用级静态文件(只是一个 CSS 文件)。以下是我尝试加载 CSS 文件的方式。

% load static %
    <link rel="stylesheet" type="% static 'homepage/css/style.css' %" href="PATHTOCSSHERE">

chrome的开发者工具在加载的文件列表中也没有显示app级的CSS文件,这显然意味着该文件没有被加载。

【问题讨论】:

【参考方案1】:

您需要遵循模板原则,将您的应用程序特定文件放在具有应用程序名称的另一级目录中 - 例如/project/homepage/static/homepage/css...。现在您的链接将起作用(使用您现有的设置)。

但是,除非您实际上是独立分发应用程序,否则我认为这不是一种有用的组织方式。只需使用您的项目级静态目录,并在其中包含特定于应用程序的目录 - /project/static/homepage/css...。那么你只需要 STATICFILES_DIRS 中的一个目录。

【讨论】:

先生,正如您所说,我遵循了目录结构的约定。我的应用程序级静态文件位于/project/homepage/static/homepage/style.css,但它不能按预期工作。其次,后来的解决方案似乎是一个不错的选择,但我想让我的应用程序完全独立。【参考方案2】:

真的对不起大家。刚刚在我自己的代码中看到一个明显的错误。该错误现已解决。谢谢!

【讨论】:

以上是关于在 django 中同时使用项目级和应用级静态文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将子级和大子级json数据附加到树视图结构中

使用 Django 在 Heroku 上提供根级静态文件?

shell中环境变量

静态文件 | Django开发

如何在 Django 应用程序的视图中引用静态文件

如何从 Heroku 上的 Django 项目正确地提供我的 Angular 应用程序静态文件?