【问题标题】:Static file collections - Logo navbar does not show up静态文件集合 - 徽标导航栏不显示
【发布时间】:2019-07-07 13:47:40
【问题描述】:

我正在尝试在导航栏上显示图像(徽标)。

我的项目名为“mysite-project”(其中manage-py是),它包含应用程序“mysite”。

为了上传我的静态文件,我做了以下操作:

1) mysite-project/mysite/settings.py

我补充说:

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

2) 创建文件夹 static 并将我的 logo.png 添加到:

mysite-project/static/mysite-project/logo.png

3) mysite-project/templates/base.html

{% load staticfiles %}
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
      <a class="navbar-brand" href="{% url 'home' %}">

        <img src="{% static 'mysite/logo.png' %}" height=30 width=30 class="d-inline-block alighn-top" />
        Code of Conduct
      </a>
</nav>

4) 在 mysite-project/mysite/urls.py

from django.contrib import admin
from django.urls import path, include
from django.views.generic.base import TemplateView
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('', TemplateView.as_view(template_name='home.html'), name='home'),
    path('admin/', admin.site.urls),
    path('users/', include('users.urls')),
    path('users/', include('django.contrib.auth.urls')),

] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

但是图片不显示。我认为我在文件夹的 settings.py 中有一些问题,但我找不到位置

【问题讨论】:

  • 您是否在网络服务器后面运行应用程序? You can configure the dev server to serve static files 但您应该考虑在部署时在网络服务器后面运行您的应用程序,该服务器将直接从磁盘为您的静态文件提供服务(我建议使用 nginx)
  • 我不确定你的意思,但我在我的mysite-project/mysite/urls.py 中添加了+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
  • 你说你添加了静态文件到“mysite-project/static/mysite-project/logo.png” 这与img src中引用的静态文件不匹配“{% static 'mysite /logo.png' %}" mysitemysite-project 不匹配。您没有看到来自开发服务器日志的 404 吗?
  • 导航栏加载,但不是徽标,而是未呈现的图像。即使我这样做,问题仍然存在:&lt;img src="{% static 'mysite-project/static/mysite-project/logo.png' %}" height=30 width=30 class="d-inline-block alighn-top" /&gt;
  • 如果我运行 python manage.py collectstatic 我得到错误:FileNotFoundError: [Errno 2] No such file or directory: '/static'

标签: django


【解决方案1】:

问题出在您的 STATICFILES_DIRS 设置中。如果你加入一个有前导斜杠的路径,那么结果将“忽略”任何前面的参数,并且后面的所有内容都将相对于 root

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, '/static/')  # This will result in "/static/"
]


STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')  # This will result in "<BASE_DIR>/static/"
]

STATIC_ROOT 是您要从中提供文件的目录,collect_static 将填充所有静态文件的目录,STATICFILES_DIRS 是 Django 将从中收集文件的目录。 STATICFILES_DIRS 不应包含 STATIC_ROOT。项目的通常布局是这样的

myproject/  # The root of your repo
    myproject/
        myapp/
            static/  # This is where you put app specific assets
                ...
        static/  # This is where you put your generic static assets. Add this to STATICFILES_DIRS
            ...
    static/  # This is STATIC_ROOT and where your files are served from after being collected

STATICFILES_FINDERS 的默认值将在STATICFILES_DIRS 每个应用程序静态目录中查找。如果您使用的是 git,则应将 repo 根目录下的静态文件夹添加到 .gitignore

【讨论】:

  • 谢谢,我改成'static'没有/static/,但现在我有错误:?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.
猜你喜欢
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
相关资源
最近更新 更多