Картинка, использованная в models, не отображается на страницу
Изображение не отображается после добавления в админку. При нажатии на изображение в админке все работает корректно, но только пока не перезагружу проект. Также после добавления картинка (в папке media/images) двоится.
models.py
class Offer(models.Model):
name = models.CharField("ФИО", max_length=60, blank=True, null=True)
nickname = models.ForeignKey(User,on_delete=models.SET_NULL, null=True)
header_image = models.ImageField("Фотография", null=True, blank=True, upload_to="images/")
price = models.IntegerField("Цена занятия")
subject = models.CharField("Предметы", max_length=60)
venue = models.ForeignKey(Venue, blank=True, null=True, on_delete=models.CASCADE)
rating = models.IntegerField("Рейтинг преподавателя", blank=True)
data = models.DateField("Сколько преподает", max_length=50, blank=True)
description = models.TextField("Описание",blank=True)
def __str__(self):
return self.name
urls.py
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
admin.py
@admin.register(Offer)
class OfferAdmin(admin.ModelAdmin):
list_display = ("name", "header_image", 'price', 'subject', "nickname")
ordering = ('name',)
search_fields = ('name', 'subject', )
html
{% extends 'main/base.html' %}
{% load static %}
{% block title %}
{{title}}
{% endblock %}
{% block extra_head_links %}
<link rel="stylesheet" type="text/css" href="{% static 'css/teacher.css' %}">
{% endblock %}
{% block content %}
{% for tutor in offers %}
<div class="blog">
<div class="container" style="max-width: 800px;">
<div class="row g-0">
<div class="col-md-8">
<div class="card-body">
<h5 class="card-title"><strong>{{ tutor }}</strong></h5>
<p class="card-text">
<ul>
<li><strong>Цена занятия: </strong>{{ tutor.price }}</li>
<li><strong>Формат проведения:</strong> {{ tutor.venue }}</li>
<li><strong>Работает с: </strong> {{ tutor.data }}</li>
<li><strong>Предметы:</strong> {{ tutor.subject }}</li>
<li>О себе: {{ tutor.description }}</li>
<li><img src="{{ offers.header_image.url }}"></li>
</ul>
</p>
</div>
<br><br>
</div>
</div>
</div>
</div>
{% endfor %}
{% endblock %}
Все остальные теги работают views.py
def all_tutors(request):
offers = Offer.objects.all()
return render(request, 'main/tutors.html', {"offers":offers})
Когда ты проходишь циклом в html, то к картинке указываешь путь offers.header_image.url
, когда к другим полям обращаешься через tutor
.
Исправь поле с картинкой на такое:
<li><img src="{{ tutor.header_image.url }}"></li>
Вам следует использовать {{ tutor.header_image.url }}
, ваш вариант не работает т.к. в html вы передаете все объекты класса Offer, а в цикле for вы достаете один tutor и через точку можете достать то, что вы хотите получить для данного объекта