Изображение Django не может загрузиться правильно, хотя я добавил статический корень
settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR,'static')
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'
urls.py
from django.contrib import admin
from django.urls import path,include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('food/',include('foodApp.urls')),
] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
HTML шаблон
<a class="navbar-brand" href="">
<img src="{% static 'delivery.png' %}">
</a>
Каталог папок
food_delivery (Main Project)
-- food_delivery
-- foodApp
-- static (folder that puts images)
-- templates
-- manage.py
Для загрузки изображений в Django, HTML шаблон не смог правильно распознать изображение, которое я пытаюсь указать. Я запутался, где я должен разместить папку static в каталоге моего проекта, и я не уверен, что мне не хватает чего-то в файле settings.py для того, чтобы распознать изображения внутри каталога папки static. Может ли кто-нибудь помочь мне найти решение для загрузки изображений, помещенных в каталог папки static?
Вам необходимо добавить статическую конфигурацию поверх конфигурации носителя:
if settings.DEBUG:
urlpatterns += (
static(settings.STATIC_URL, document_root=settings.STATIC_ROOT))
urlpatterns += (
static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT))
Обратите внимание, что if settings.DEBUG не требуется, так как функция static проверяет, находится ли приложение в режиме отладки. Я просто поместил ее здесь для напоминания.
Конечно, если вы не используете MEDIA_ROOT, просто удалите его.
Ваша структура каталогов кажется хорошей, но в settings.py вы должны добавить STATICFILES_DIRS:
STATIC_URL = '/static/'
MEDIA_URL = '/images/'
STATICFILES_DIRS = [
BASE_DIR / 'static'
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/images')
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
и поместите delivery.png в папку static.
P.S.
Я добавляю static к urlpatterns как if утверждение, как показано ниже, чтобы избежать проблем при последующих развертываниях.
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
#settings.py
INSTALLED_APPS = [
...
'django.contrib.staticfiles',
...
]
TEMPLATES = [
{...
'context_processors': [
'django.template.context_processors.media',
'django.template.context_processors.static',
],
...}
]
STATIC_URL = '/static/'
STATIC_ROOT = BASE_ROOT / 'static'
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_ROOT / 'media'
#urls.py
if settings.DEBUG:
urlpatterns += (
static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) +
static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
)
#html
{% load static %}
<a class="navbar-brand" href="">
<img src="{% static 'delivery.png' %}">
</a>