django - 静态文件集合 - 徽标导航栏不显示
问题描述
我想在导航栏上有一个图像(标志)。
我的项目名为“ 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中有一些问题,但我找不到在哪里
解决方案
问题出在您的 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
推荐阅读
- excel - VBA Range.Formula 问题
- java - StringTokenizer 错误:不兼容的类型:对象无法转换为字符串
- flutter - Windows 上的 Flutter 安装错误
- java - DatabaseException - 无法将 java.lang.String 类型的对象转换为 com.appmaster.akash.messageplus.Results 类型
- java - 解决“类与类不兼容
" - javascript - 在节点 js 8 中打印 libuv 线程池大小
- node.js - PM2 部署权限被拒绝
- asp.net - .NET Core Web API:多个 [FromBody]?
- http - 从 HttpURLConnection 获取实体主体
- google-chrome - 如何以完全相同的构建顺序查看由 Web 浏览器(Firefox、Chrome、Safari)触发的 HTTP 标头