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

时间:2017-01-29 21:15:02

标签: django django-staticfiles django-apps

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

问题

app1的模板文件中,我可以非常轻松地为app1生成静态文件的网址。但是,如果我希望app2模板文件为app1的静态文件生成网址,则链接无效。如何在app2中生成{% load static %} <img src="{% static "app1/example.jpg" %}"> <!-- ok --> <img src="{% static "app2/example.jpg" %}"> <!-- link broken --> 的静态文件?

App1模板文件:

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

HTML输出

{{1}}

3 个答案:

答案 0 :(得分:1)

我找到了解决方案。请注意,项目文件夹中与项目文件夹名称完全相同的目录是一个应用程序。起初认为它是初始应用程序,由Django自动创建,但它不是。

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

答案 1 :(得分:1)

我有同样的问题。我在settings.py

中设置了此变量来处理它
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'app1/static/'),
    os.path.join(BASE_DIR, 'app2/static/'),
]

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

我正在使用django 2.1。 Obs: 1-也许在使用startapp命令时默认设置了此设置。 Idk。 2-BASE_DIR是settings.py的绝对路径。

答案 2 :(得分:0)

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

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