姜戈;从视图传递到模板的模型对象图像的显示问题

Django; display problems for image of model object passed to template from view

使用 django admin 和附加图像创建了名称、描述和图像的新项目,我看到图像在上传时弹出到服务器上的媒体文件夹中。我将项目从视图传递到模板。项目名称、描述显示在网站上,但图像 ('image.jpg') 没有。有任何想法吗?也许 nginx 导致图像保持隐藏状态?我正在使用 nginx、gunicorn、django。

注意:在 Chrome 上,它显示了一个破损的图像图标。浏览器上的源代码显示<img src="image.jpg/">。我注意到静态文件的格式为:<img src="static/app1/image123.jpg 并且显示正常。也许我的问题图片应该有 media/app1/...?

我的最终目标是显示一个 graph/image 但是此图像经常被服务器上的单独应用程序覆盖在媒体文件夹中并进行更改。这样浏览者可以获得最新的图像。

精简文件结构,方便查看:

-website1
-media
 image.jpeg
+static
-app1
 -templates
  -app1
   index.html
   layout.html
-website1
 settings.py
 ..

网站 1 urls.py:

from django.contrib import admin
from django.urls import path, include
from django.conf.urls import include, url
from django.conf.urls.static import static
from website1 import settings

urlpatterns = [
    path('admin/',admin.site.urls),
    path('app1/',include('app1.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

app1 的 urls.py:

from django.conf.urls import url
from . import views
from django.urls import path, include

urlpatterns = [
    path('', views.index,name='index'),
]

settings.py:

...
...
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

MEDIA_URL = '/media/'
MEDIA_ROOT= 'media/'

views.py:

from django.shortcuts import render
from django.http import HttpResponse
import datetime

from PIL import Image
from django.core.files import File
from django.conf import settings
from io import BytesIO
import os
from app1.models import Item

def index(request):
    now = datetime.datetime.now()
    return render(request,'app1/index.html', {
        'Data':now,
        'itemContext':Item.objects.get(id=1)
    })

index.html:

{% extends 'app1/layout.html' %}
{% block content %}
<h1 align="center">{{Data}}</h1>
<h2 align="center">
    {% load static %}
    <img src="{% static "sentiment_analysis/image.jpeg" %}" alt="No immage"/>
</h2>
<h4>

    {{itemContext.name}}
    {{itemContext.description}}
    <img src="{{ itemContext.image }}"/>

</h4>
{% endblock %}

app1 的 models.py:

from django.db import models

class Item(models.Model):
    name = models.CharField(max_length=32)
    description = models.TextField()
    image = models.ImageField(blank=True, null=True)

    def __str__(self):
        return self.name

nginx/sites-avilable.conf:

...
...
root /usr/share/nginx/html;
index index.html index.htm;

location /static/ {
    alias   /home/jeff/website1/static/;
}

location /media/ {
    alias /home/jeff/website1/media/;
}
...
...

[解决方案是文件权限问题...查看评论]

在图像 src 中,你有双引号,所以 src 不起作用用那个替换它,你应该很好

<img src="{% static 'sentiment_analysis/image.jpeg' %}" alt="No immage"/>



eidt your code is like that 
<img src="{% static " #this quotes ends here 
sentiment_analysis/image.jpeg # this isnt inside any quotation 
" %}" # second quotation start and end here 

在这里你应该重新定位:

<img src="{{ itemContext.image }}"/>

有了这个

<img src="{{ itemContext.image.url }}"/>