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 %}