Django - 从另一个应用程序加载静态文件

Django - Load static files from another app

在 app1 中,我试图从 app2 加载静态文件。我在项目 settings.py 中没有设置 STATICFILES_FINDERS,这意味着,当它在应用程序目录中找到静态子目录时,Django will use default AppDirectoriesFinder

问题:

app1的模板文件中,我可以很容易地为app1生成静态文件的url。但是,如果我希望 app1 模板文件为 app2 的静态文件生成 url,链接将不起作用。我如何在 app1 中生成 app2 的静态文件?

App1 模板文件:

{% load static %}
<img src="{% static "app1/example.jpg" %}"> <!-- ok -->
<img src="{% static "app2/example.jpg" %}"> <!-- link broken -->

HTML 输出:

<img src="http://localhost:8000/static/app1/example.jpg">
<img src="http://localhost:8000/static/app2/example.jpg"> 

我找到了解决办法。请注意,项目文件夹中与项目文件夹同名的目录 不是 应用程序。一开始以为是Django自动创建的初始app,其实不是。

如果您有两个应用程序,并且您想要在它们之间加载静态文件,上面的代码示例可以工作。

我遇到了同样的问题。我在 settings.py

中设置了这个变量
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'app1/static/'),
    os.path.join(BASE_DIR, 'app2/static/'),
]

因此,无论您从哪个应用调用它,这两个目录都可以在静态模板标记中使用。

我正在使用 Django 2.1。 观察: 1 - 也许这是在您使用 startapp 命令时默认设置的。同上。 2 - BASE_DIR 是 settings.py.

的绝对路径

只需将其添加到您的 settings.py(来自 Django 文档)

STATICFILES_DIRS = [
    BASE_DIR / "static",
    'var/www/static/',
]