Не отоброжается загруженная в папку media картинка в Django

Рейтинг: 0Ответов: 1Опубликовано: 14.04.2023

Я пишу отдельную страницу с более подробной информацией о турах, предлагаемых тур агентством. Мне надо вывести загруженную картинку в media папку. Что мне нужно сделать для этого?

urls.py (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('', include('core.urls')),
    path('summernote/', include('django_summernote.urls')),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

X_FRAME_OPTIONS = 'SAMEORIGIN'

urls.py приложения:

from django.urls import path
from django.conf import settings
from django.conf.urls.static import static

from . import views

app_name = "core"

urlpatterns = [
    path("", views.index, name = "index"),
    path("blog", views.blog, name = "blog"),
    path('email', views.email, name = 'email'),
    path("blog-single", views.blogSingle, name = "blogSingle"),
    path("tour-details/<int:ID>", views.portfolioDetails, name = "portfolioDetails"),
    path('success', views.success, name = 'success'),
    path('mailist', views.mailist, name = 'mailist'),
]   + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

функция из views.py, отвечающая за эту страницу:

def portfolioDetails(request, ID):
    relevant_tour = Tour.objects.get(id = ID)
    context = {"tour":relevant_tour}
    return render(request, 'core/tour-details.html', context)

models.py тура;


class Tour(models.Model):
    title = models.CharField(max_length=64)
    description = models.TextField()
    image = models.ImageField(upload_to="tours/")
    cities = models.ManyToManyField(City, related_name="continents")
    duration = models.IntegerField()
    continent = models.ForeignKey(Continent, related_name= "continents", on_delete=models.CASCADE)

    def __str__(self):
        return self.title

html код страницы:

    <div class="col-lg-8">
      <img src= "media/{{tour.image}}" class="img-fluid tour-image" alt="Проверьте ваше интернет соединение">
    </div>

Вместо обычной картинки просто отоброжается alt текст.

Ответы

▲ 0

Надо было убрать media/ из src и добавить к {{tour.image}} url. Таким образом, итоговый код будет выглядеть так: {{tour.image.url}}