2012-01-29 41 views
1

表示する画像や画像のリンクを取得できません。私はフルサイズの画像のリンクであるサムネイルを表示するはずのモデルメソッド( 'thumbnail_')を持っています。 Webページ(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

私はあなたがすべてで何かを得る驚いて。あなたのビューでこの行:thumbnail_はそれがImageクラスのメソッドで、フィールドではありませんので、

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

は、許可されていません。 valuesはフィールドでのみ動作し、それらの名前の辞書を含むクエリーセットを返します。実際のフィールドthumbnailを使用しても、values呼び出しでは、valuesによって返されるdictにthumbnail_メソッドが存在しないため、テンプレートは正しく出力されません。

単純な解決策は、標準Image.objects.all()をここで呼び出すことです。返されるフィールドの数を制限しようとすると、過剰最適化が行われます。

(また、あなたの方法よりよい名前を試してみて与えてください:render_thumbnailのようなものは単なるthumbnail_より良いだろう)

+0

メソッドをrender_thumbnailに変更し、Image.objects.all()を使用しました。私はまた - thumbnail_.allow_tags = Trueとdjango.utils.safestringからimport mark_safeからコメントアウトし、 "mark_safe"を反映するようにメソッドを変更しました。return mark_safe( "" "" ""%( (self.image。 – BillB1951

+0

)タグは動作するように見えるが、サムネイルやリンクのレンダリングは行われていない。 – BillB1951

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) 

画像が正しいディレクトリにあるかどうかを確認してください。