【问题标题】:Django; display problems for image of model object passed to template from view姜戈;从视图传递到模板的模型对象图像的显示问题
【发布时间】:2018-08-13 22:07:56
【问题描述】:

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

【问题讨论】:

    标签: django templates nginx views media


    【解决方案1】:

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

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

    【讨论】:

    • 您在上面粘贴的行 /image 工作正常。与我的问题有关的线条和图像是 ,您到底要修复什么? ??
    • 只需将单引号放在双引号内,整个情感分析/image.jpeg 实际上不在任何引号内检查我的编辑
    • 我改成单引号,图片用双引号或单引号显示。您的解决方案不起作用......我过去实际上有 itemContext.image.url 但是当我尝试的时候我忘了把它放回去。还是不行。
    • 当您从源代码中右键单击并在新选项卡中打开时,它会打开还是得到 404?
    • 右键什么?如果是图像,那么如果我尝试在新窗口中打开损坏的图像图标,如果给出 403 禁止错误
    猜你喜欢
    • 2016-11-06
    • 2012-08-19
    • 2019-06-07
    • 1970-01-01
    • 2017-04-26
    • 2016-09-28
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    相关资源
    最近更新 更多