【发布时间】:2015-02-15 17:48:03
【问题描述】:
在我的 Django PhotoViewer 应用程序的 models.py 中,我为我的 Photo 类定义了一个 imageField,用于在网站上显示图像。我通过 Django 管理页面上传了几张照片,但没有一张显示出来。我确实在本地 /static/images 文件夹中看到所有这些照片。但是当我转到我的照片索引(照片列表页面):127.0.0.1:8000:photoViewer/photos 时,我看到的是下面的页面:
models.py:
from django.db import models
#photoViewer/: (index) photostream (list all photos)
class Photo (models.Model):
photo_title = models.CharField(max_length=200)
#how to retrieve from metadata of file?
date_taken = models.DateField('date taken', default=None, blank=True, null=True)
photo_img = models.ImageField(upload_to = "images/", default= "")
def __str__(self): # __unicode__ on Python 2
return self.photo_title
photoViewer/urls.py
from django.conf.urls import patterns, url
from photoViewer import views
urlpatterns = patterns('',
# "photoViewer/photos"
url(r'^photos/$', views.IndexView.as_view(), name='index'),
# "photoViewer/photos/5/"
url(r'^photos/(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'),
# "photoViewer/albums/"
# Display list of albums
url(r'^albums/$', views.AlbumsIndexView.as_view(), name='albumsIndex'),
# "photoViewer/albums/1"
# Display photos for a given album
url(r'^albums/(?P<pk>\d+)/$', views.AlbumDetailView.as_view(), name='albumDetail'),
url(r'^test/$', views.TemplateTestView.as_view(), name='templateTest'),
)
photoViewer/views.py
from django.shortcuts import get_object_or_404, render
from django.http import Http404, HttpResponse, HttpResponseRedirect
from django.template import RequestContext, loader
from photoViewer.models import Photo, Album
from django.core.urlresolvers import reverse
from django.views import generic
# Create your views here.
class TemplateTestView (generic.ListView):
model = Photo
template_name = 'photoViewer/test.html'
class IndexView(generic.ListView):
#By default: Uses <app name>/<model name>_detail.html
#as template
template_name = 'photoViewer/photo_index.html'
context_object_name = 'latest_photo_list'
def get_queryset(self):
return Photo.objects.order_by('-date_taken')[:5]
class DetailView(generic.DetailView):
model = Photo
#By default: Uses <app name>/<model name>_detail.html
#Unless specified by template_name
template_name = 'photoViewer/photo_detail.html'
#context_object_name = <new name>
class AlbumsIndexView(generic.ListView):
template_name = 'photoViewer/albums_index.html'
context_object_name = 'latest_albums_list'
def get_queryset(self):
return Album.objects.order_by('-date_created')[:5]
class AlbumDetailView(generic.DetailView):
model = Album
template_name = 'photoViewer/albums_detail.html'
photoViewer/templates/photoViewer/photo_detail.html(照片详情页面模板):
<h1>Photo Detail</h1>
<li>{{ photo.photo_title }}</li>
<li>{{ photo.date_taken }}</li>
<img src="/static/{{ photo.photo_img }}" alt={{ photo.photo_title }}>
<h2>Albums Association</h2>
{% if photo.album_set.all %}
<ul>
{% for album in photo.album_set.all %}
<li>{{ album.album_title }}</li>
<!-- <li><a href="{% url 'photoViewer:detail' photo.id %}">{{ photo.photo_title }}</a> {{ photo.date_taken }} </li>
-->
{% endfor %}
</ul>
{% else %}
<p>This Photo is Not in Any Album</p>
{% endif %}
我安装了最新版本的pillow
【问题讨论】:
-
您的视图是什么样的?您的浏览器试图加载什么 url?它会返回 404、401 还是其他?
-
需要查看模板以及如何访问那里的图像字段。
-
刚刚更新了我的问题以包含 urls.py、views.py 和模板文件
-
404 控制台输出在网络选项卡中的外观如何?您的 MEDIA_URL 设置是什么?在管理站点,在更改模型形式时,您可以单击链接并在浏览器中查看图像吗?
-
我已将 img src 从“/static/{{ photo.photo_img }}”更改为“/media/{{ photo.photo_img }}”,现在可以正常工作了!我注意到在管理站点中,照片链接指向127.0.0.1:8000/media/images,而不是我想象的 /static。您通过管理员上传的所有照片最终都在 /media 而不是 /static 中吗?那么如何将图片放入/static 并访问/static 媒体呢?