gpt4 book ai didi

django - 在 Django 中管理多个应用程序的静态文件

转载 作者:行者123 更新时间:2023-11-28 19:34:52 29 4
gpt4 key购买 nike

我正在开发一个由许多应用程序组成的 Django (1.3) 项目。每个应用程序在其自己的 static 目录下都有自己的静态文件。此外,我添加了一个名为 project_static 的目录,该目录应包含在各种应用程序中通用的静态文件,例如 jQuery。

我立即遇到的问题是命名冲突。默认情况下,collectstatic 只会将所有内容放在全局 static 目录下,而不按应用程序对它们进行分类。这对我不起作用,因为每个应用程序都有 - 例如 - 一个名为 css/screen.css 的文件。

我解决它的方法是从 STATICFILES_FINDERS 中删除 django.contrib.staticfiles.finders.AppDirectoriesFinder 并使用 namespaced static files dirs ,所以我的设置现在看起来像:

STATICFILES_DIRS = (
os.path.join(PROJECT_PATH, 'project_static'),
('my_app', os.path.join(PROJECT_PATH, 'my_app', 'static')),
('another_app', os.path.join(PROJECT_PATH, 'another_app', 'static')),
...
)

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

问题是这样我丢失了所有其他应用程序的静态文件(例如django.contrib.admin)。当然,我可以手动添加管理员,但我不确定如何在不破坏具有不同目录结构的管理员的情况下执行此操作。

Is there a better way to manage the static files with more than one application?

最佳答案

这与使用特定于应用程序的 templates 目录时出现的问题相同。如果您只是将文件直接放在应用程序中的 templates 下,如果两个应用程序甚至项目级 templates 目录使用的模板,您最终会遇到名称冲突一样的名字。解决方法是将模板实际放在 templates 目录中应用程序名称的目录中,例如:

- some_app
- templates
- some_app
- index.html

所以,我将同样的想法应用到静态:

- some_app
- static
- some_app
- css
- img
- js

这样,当您运行 collectstatic 时,每个应用程序的静态文件都会被放置在一个命名空间目录中。您需要做的唯一更改是在模板中为每个文件加上 app-name 目录前缀。因此,您使用的不是 {{ STATIC_URL }}css/style.css {{ STATIC_URL }}my_app/css/style.css

关于django - 在 Django 中管理多个应用程序的静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7192367/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com