Джанго не может отобразить изображение, сохраненное в базе данных - PullRequest
0 голосов
/ 30 июня 2019

Я написал два шаблона в Django "index.html" и "detail.html". В обоих шаблонах я отображаю png, в шаблоне «index» графика отображается корректно, а в шаблоне «detail» имеет статус «src (unknown)».

detail.html (details.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>

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' film.id %}">
          <img class = "card-img" src="{{film.image.url}}" > </img>
            </a>
        <div class="card-body">
          <p class="card-text"> {{film.summary}}  </p>

        </div>
      </div>
    </div>
    {% endfor %}



  </div>
</div>

views.py

from django.shortcuts import render, get_object_or_404

from django.http import HttpResponse

from .models import Films

# Create your views here.

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

urls.py

from django.urls import path

from .import views

urlpatterns = [
    path('', views.index, name="index"),
    path('<int:films_id>', views.detail, name="detail"),
]

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Перед тем, как показывать какое-либо изображение, вы должны сообщить об этом в свой 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>
0 голосов
/ 30 июня 2019

Вы передаете films из подробного вида, поэтому используйте films.image.url. Также всегда используйте конечный слеш в конце URL path('<int:films_id>/', views.detail, name="detail"),

<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="{{films.image.url}}" > </img>
        <p>
          <a href="{% url 'index' %}" class="btn btn-primary my-2">Back</a>
        </p>

      </div>
    </section>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...