Перед тем, как показывать какое-либо изображение, вы должны сообщить об этом в свой url.py, поэтому правильный способ сделать это - создать следующие MEDIA_ROOT и MEDIA_URL в setting.py
Управление мультимедиа
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'
После этого импортируйте это в url.py из настроек и добавьте его в urlpatterns
Добавление URL
urlpatterns = [
path('admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
После добавления этого Django определенно распознает ваш URL
Настоящая проблема в вашем коде заключается в том, что вы передаете фильмы (в виде словаря) из views.py, но оцениваете их в шаблонах как фильм
views.py
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Films
def index(request):
films = Films.objects.all()
return render(request, 'films/index.html',{'films':films})
def detail(request, films_id):
films_detail = get_object_or_404(Films,pk=films_id)
return render(request, 'films/detail.html',{'films':films_detail})
index.html
` <div class="row">
{% for film in films.all %}
<div class="col-md-4">
<div class="card mb-4 shadow-sm">
<a href="{% url 'detail' films.id %}">
<img class = "card-img" src="{{films.image.url}}" > </img>
</a>
<div class="card-body">
<p class="card-text"> {{films.summary}} </p>
</div>
</div>
</div>
{% endfor %}
</div>
</div>`
detail.html
<section class="jumbotron text-center">
<div class="container">
<h1 class="jumbotron-heading">Course Detail</h1>
<p class="lead text-muted"> {{ films.summary}}.</p>
<img class = "card-img" src="{{film.image.url}}" > </img>
<p>
<a href="{% url 'index' %}" class="btn btn-primary my-2">Back</a>
</p>
</div>
</section>