首页 > 解决方案 > 静态文件集合 - 徽标导航栏不显示

问题描述

我想在导航栏上有一个图像(标志)。

我的项目名为“ 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中有一些问题,但我找不到在哪里

标签: django

解决方案


问题出在您的 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


推荐阅读