在 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 中同时使用项目级和应用级静态文件的主要内容,如果未能解决你的问题,请参考以下文章