2012-01-29 154 views
1

我有问题获取图像和图像链接显示。我有一个应该显示缩略图的模型方法('thumbnail_'),它是链接全尺寸图像的缩略图。它不是渲染到网页(image.html)。我究竟做错了什么?谢谢。Django - 显示图像和图像链接

model.py

class Image(models.Model): 
    title = models.CharField(max_length=60, blank=True, null=True) 
    image = models.ImageField(upload_to="images/", blank=True, null=True) 
    thumbnail = models.ImageField(upload_to="images/", blank=True, null=True) 
    thumbnail2 = models.ImageField(upload_to="images/", blank=True, null=True) 
    #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) 
    listings = models.ForeignKey(Listings) 

def save(self, *args, **kwargs): 
    # Save image dimensions 
    super(Image, self).save(*args, **kwargs) 
    im = PImage.open(pjoin(MEDIA_ROOT, self.image.name)) 
    self.width, self.height = im.size 

    # large thumbnail 
    fn, ext = os.path.splitext(self.image.name) 
    im.thumbnail((256,256), 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 thumbnail 
    im.thumbnail((60,60), PImage.ANTIALIAS) 
    thumb_fn = fn + "-thumb" + ext 
    tf = NamedTemporaryFile() 
    im.save(tf.name, "JPEG") 
    self.thumbnail.save(thumb_fn, File(open(tf.name)), save=False) 
    tf.close() 

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


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

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

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

view.py

def image(request): 
    image = Image.objects.values('id', 'title', 'thumbnail_') 
    context = { 
     'image' : image, 
    } 
    return render_to_response('bsmain/image.html', context) 

image.html

<TABLE id="some_id">  
<TBODY> 
    {% load humanize %} 
    {% for row in image %} 
    <tr> 
     <td>{{ row.id }}</td> 
     <td>{{ row.title}}</td> 
     <td>{{ row.thumbnail_}}</td>    
    </tr> 
    {% endfor %} 
</TBODY> 

回答

1

我很惊讶你得到任何东西。这条线在你看来:

image = Image.objects.values('id', 'title', 'thumbnail_') 

是不允许的,因为thumbnail_是不是一个领域,它是在Image类中的方法。 values仅在字段上操作,返回包含这些名称的字典的查询集。即使您使用实际字段thumbnail,在values调用中,由于values返回的字典中不存在thumbnail_方法,模板仍然无法正确输出。

简单的解决方案是在这里使用标准的Image.objects.all()调用 - 试图限制返回的字段数量过度优化。

(另外,请尝试给你的方法一个更好的名字:像render_thumbnail将不仅仅是thumbnail_更好。)

+0

我改变方法render_thumbnail,并使用Image.objects.all()。我也注释掉了---- thumbnail_.allow_tags = True并从django.utils.safestring导入了mark_safe,然后改变了我的方法以反映“mark_safe”return mark_safe(“”“”“”%( (self.image。名称,self.thumbnail.name))) – BillB1951 2012-01-30 00:44:38

+0

我现在得到的标签,看起来应该像他们应该工作,但他们不呈现缩略图或链接。 – BillB1951 2012-01-30 00:57:06

0

我看不到任何属性命名thumbnail_

image = Image.objects.values('id', 'title', 'thumbnail_') 

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

检查图像是否在正确的目录中。