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

时间:2018-08-13 22:07:56

标签: django templates nginx views media

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

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

我的最终目标是使图表/图像令人失望,但是该图像经常会通过更改从服务器上单独应用程序的媒体文件夹中被覆盖并进行更改。这样观众就可以获取最新图像。

简化的文件结构,易于查看:

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

website1 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/;
}
...
...

1 个答案:

答案 0 :(得分:0)

[解决方案有文件许可问题...请参阅评论]

在图像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 }}"/>