2012-07-19 100 views
1

我是一个Django初学者,试图通过lightbird.net的这个教程来构建照片共享应用程序。我遇到问题,要将照片显示在开发服务器上。虽然我可以在管理界面上传和保存图像,但照片也不会显示在那里。相反,我只看到一个jpeg图标。当我在开发服务器上查看页面时,会出现相同的jpeg图标而不是照片。在Django App上没有显示图像

昨天我安装了PIL和jpeg库,现在我的应用程序运行没有错误,我怀疑图像不显示的原因与这两个安装中的一个有关。我认为这可能是一个浏览器问题,但我不能查看来自Firefox,谷歌浏览器或Safari浏览器的图像。

在此先感谢您的帮助。这个网站岩石!

的代码的HTML是:

{% extends "pbase.html" %} 

{% block content %} 
    <div class="main"> 
     <!-- Albums --> 
     <ul> 
      {% for album in albums.object_list %} 
       <div class="title">{{ album.title }} ({{ album.image_set.count}} images)</div> 
       <ul> 
        {% for img in album.images %} 
         <a href="{{ media_url }}{{ img.image.name }}"><img border="0" alt="" 
          src="{{ media_url }}{{ img.thumbnail2.name }}" /></a> 
        {% endfor %} 
       </ul> 
      {% endfor %} 
     </ul> 

     <!--Next/Prev page links--> 
     {% if albums.object_list and albums.paginator.num_pages > 1 %} 
     <div class="pagination"> 
      <span class="step-links"> 
       {% if albums.has_previous %} 
        <a href= "?page={{ albums.previous_page_number }}">previous &lt;&lt;</a> 
       {% endif %} 

       <span class="current"> 
        &nbsp;Page {{ albums.number }} of {{ albums.paginator.num_pages }} 
       </span> 
       {% if albums.has_next %} 
        <a href="?page={{ albums.next_page_number }}"> &gt;&gt; next</a> 
       {% endif %} 
      </span> 
     </div> 
     {% endif %} 
    </div> 
{% endblock %} 

的观点是:

def main(request): 
    albums = Album.objects.all() 
    if not request.user.is_authenticated(): 
     albums = albums.filter(public=True) 

    paginator = Paginator(albums, 10) 
    try: page = int(request.GET.get("page", "1")) 
    except ValueError: page = 1 

    try: 
     albums = paginator.page(page) 
    except(InvalidPage, EmptyPage): 
     albums = paginator.page(paginator.num_pages) 

    for album in albums.object_list: 
     album.images = album.image_set.all()[:4] 

    return render_to_response("list.html", {'albums':albums, 'user':request.user, 'media_url':MEDIA_URL}) 

我的车型有:

class Album(models.Model): 
    title = models.CharField(max_length=60) 
    public = models.BooleanField(default=False) 
    def __unicode__(self): 
     return self.title 

    def images(self): 
     lst = [x.image.name for x in self.image_set.all()] 
     lst = ["<a href='/media/%s'>%s</a>" % (x, x.split("/")[-1])for x in lst] 
     return join(lst, ",") 
    images.allow_tags = True 


class Tag(models.Model): 
    tag = models.CharField(max_length=60) 
    def __unicode__(self): 
     return self.tag 


class Image(models.Model): 
    title = models.CharField(max_length=60, blank=True) 
    image = models.FileField(upload_to="images/") 
    tags = models.ManyToManyField(Tag, blank=True) 
    albums = models.ManyToManyField(Album, blank=True) 
    created = models.DateTimeField(auto_now_add=True) 
    rating = models.IntegerField(default=50) 
    width = models.IntegerField(blank=True, null=True) 
    height = models.IntegerField(blank=True, null=True) 
    user = models.ForeignKey(User, null=True, blank=True) 

    thumbnail2 = models.ImageField(upload_to="images/", blank=True, null=True) 

    def save(self, *args, **kwargs): 
     """save image dimensions.""" 
     super(Image, self).save(*args, **kwargs) 
     im = PImage.open(os.path.join(MEDIA_ROOT, self.image.name)) 
     self.width, self.height = im.size 

     # large thumb 
     fn, ext = os.path.splitext(self.image.name) 
     im.thumbnail((128,128), PImage.ANTIALIAS) 
     thumb_fn = fn + "-thumb2" + ext 
     tf2 = NamedTemporaryFile() 
     im.save(tf2.name, "JPEG") 
     self.thumbnail2.save(thumb_fn, File(open(tf2.name)), save=False) 
     tf2.close() 

     #small thumb 
     im.thumbnail((40,40), PImage.ANTIALIAS) 
     thumb_fn = fn + "-thumb" + ext 
     tf = NamedTemporaryFile() 
     im.save(tf.name, "JPEG") 
     self.thumbnail2.save(thumb_fn, File(open(tf.name)), save=False) 
     tf.close() 

     super(Image, self).save(*args, **kwargs)  

    def size(self): 
     return "%s x %s" % (self.width, self.height) 

    def tags_(self): 
     lst = [x[1] for x in self.tags.values_list()] 
     return str(join(lst, ', ')) 

    def __unicode__(self): 
     return self.image.name 

    def albums_(self): 
     lst = [x[1] for x in self.albums.values_list()] 
     return str(join(lst, ', ')) 

    def thumbnail(self): 
     return """<a href="/media/%s"><img border="0" alt="" src="/media%s" height="40" /></a>""" % (self.image.name, self.image.name) 
    thumbnail.allow_tags = True 

回答

1

您可能还需要更新您的项目具有以下的urls.py:

(r'^media/(?P<path>.*)$', 'django.views.static.serve', { 
'document_root': settings.MEDIA_ROOT})