【发布时间】: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