Django - статическое изображение не отображается в шаблоне

Я просто пытаюсь отобразить основное изображение, которое хранится в моей папке static, но ничего не отображается. Я выполнил collectstatic, но ничего не получилось.

Путь: /static/logos/IMG_1793.jpg

(Это то, что отображается при печати tenant.image.url)

Settings.html:

<img src="{{ imagePath }}" alt="{{ tenant.name }}">

Я также пробовал: src="{% static imagePath %}"

Views.py

def settingsPage(request):
    tenant = get_tenant(request)
    imagePath = tenant.image.url
    context = {'tenant': tenant, 'imagePath': imagePath}
    return render(request, 'setting/settings.html', context)

В теге img src обычно указывается URL изображения. Поэтому, если вы знаете URL, просто поместите его туда вместо названия изображения.

<img src="{{ tenant.image.url }}" alt="{{ tenant.name }}">

Et voilà!

если вы находитесь в режиме разработчика

в settings.py

убедитесь, что отладка ложная (DEBUG = False)
и вы указали STATIC_ROOT = 'static/'

Решить вашу задачу очень просто, сначала нужно относительно импорта установить медиа url и статический путь в вашем файле setting.py:

# Goes in the setting.py 
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/media')

Затем вы связываете пути media и static в вашем основном urls.py для загрузки статических файлов и в определенное время сохраняете файлы в директории static и media.

#Your main urls.py 
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
]
if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Затем мы сосредоточимся на нашем view.py, где происходят все манипуляции с данными для рендеринга во фронтенде. То, что вы сделали, в основном хорошо, и поэтому я буду придерживаться вашего соглашения! Но вы упустили получение данных из бэкенда, в котором не сможет работать для рендеринга изображений, я полагаю, что именно в этом и заключается наша проблема.

# our view.py 
# first make sure to import the tenant models

from .models import Tenant

def settingsPage(request):
    # Here we are getting all tenant objects from our backend database
    # to render in the frontend template 
    tenants = Tenant.objects.all()
    context = {'tenants': tenants}
    return render(request, 'setting/settings.html', context)

После того, как мы создали представление для наших данных, мы сосредоточимся на визуализации данных в нашем шаблоне фронтенда. Именно здесь мы собираемся показать наши изображения. Поскольку наше представление не является детальным представлением, нам нужно будет просмотреть данные из представления в нашем шаблоне, чтобы получить отображение изображений.

# our template where the image will be shown.
# here we are looping to get all the objects in tenant
{% for tenant in tenants %} 
<div>
<img src="{{ tenant.image.url }}" alt="">
    {{ tenant.name }}
    {{ tenant.subdomain}}
</div>
{% endfor %}
Вернуться на верх