Django无法显示数据库中保存的图像

时间:2019-06-30 16:00:34

标签: django python-3.x

我在Django中编写了两个模板“ index.html”和“ detail.html”。在这两个模板中,我都显示png,在模板“索引”中,图形正确显示,在模板“详细信息”中,状态为“ src(未知)”。

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 :(得分:0)

您正在从详细信息视图传递films,因此请使用films.image.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>

答案 1 :(得分:0)

在显示任何图像之前,您应该使url.py对此进行通知,因此,正确的方法是在setting.py中创建以下MEDIA_ROOT和MEDIA_URL

管理媒体

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中传递电影(作为Dictionary),而在模板中将其作为电影进行评估

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>