【问题标题】:django won't load staticfiles from statifiles_dirsdjango 不会从 statifiles_dirs 加载静态文件
【发布时间】:2019-02-23 11:45:50
【问题描述】:

我的style.css 放在appname/static/appname/

我的settings.py 有这个代码:

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static/"),
    )

在我的base.html 中,我像这样加载它:

{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'appname/style.css' %}">

但是样式没有加载。 如果我删除STATICFILES_DIRS 并将STATIC_URL = '/static/' 更改为STATIC_URL = '/static/appname/',它会完美运行,但我想这不是我稍后将任何其他应用程序添加到项目中的最佳实践。我可能做错了什么?

【问题讨论】:

  • 这应该可以,我的意思是你的配置。 STATICFILES_DIRS = (os.path.join(BASE_DIR, "static/"),) 行意味着 django 将在目录 rootproject/static/ 中搜索,而不是在您的应用程序中搜索 static 。你的目录结构是什么?

标签: python css django styles django-staticfiles


【解决方案1】:

删除 {% static 'appname/style.css' %} 中的“appname”,你不能把它放在那里,因为python会自动知道文件在哪个应用程序中,它会从请求中获取应用程序名称

【讨论】:

  • 你应该在 django 终端中看到 HTTP 调用,找到 syle.css 的相对文件并将其复制到这里
  • 是说“GET /static/style.css HTTP/1.1” 404 1651,好像它没有检查 STATICFILES_DIRS...?
  • 使用应用名称的广告?
  • 那么关于styles.css什么也没说
  • 系统检查未发现任何问题(0 静音)。 2018 年 9 月 19 日 - 13:34:26 Django 版本 2.1.1,使用设置 'md5light.settings' 在 127.0.0.1:8000 启动开发服务器 使用 CTRL-BREAK 退出服务器。 [2018 年 9 月 19 日 13:34:34]“GET /appname/HTTP/1.1”200 1443
【解决方案2】:

只要改变一件事,

STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)

它将在您的应用程序内的静态文件夹中搜索。另外,如果你想添加一个特定的目录,

STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"), '/your specific directory/',
)

从这里您可以直接添加特定的文件名,djnago 将在该特定目录中搜​​索。

【讨论】:

  • “您的项目可能还会有不绑定到特定应用程序的静态资产。除了在应用程序中使用 static/ 目录之外,您可以在设置文件中定义目录列表(STATICFILES_DIRS),Django 也会在其中查找静态文件”。仅当您想要除应用程序之外的额外目录时才需要这样做。
【解决方案3】:

默认情况下,django 从应用目录中选择static 目录。因此,如果您的静态目录位于 app 目录中,则无需指定 STATICFILES_DIRS。 现在/static/ 将指向应用程序静态目录中的文件和目录。要引用您的 css 文件,请使用

{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'appname/style.css' %}">

【讨论】:

  • 确保STATICFILES_DIRS = []
猜你喜欢
  • 2012-04-30
  • 2017-10-08
  • 1970-01-01
  • 2017-04-08
  • 2017-11-08
  • 1970-01-01
  • 2019-01-21
  • 2018-11-16
  • 2020-09-10
相关资源
最近更新 更多