2012-04-01 21 views
0

テンプレートに表示する画像(または画像リンク)を取得できません。他のすべてはテンプレート上で作業していますが、カスタムモデルメソッドで定義されている "render_thumbnail"イメージです。私は間違って何をしていますか? -btw render_thumbnailは、Imagesテーブルのみで作業しているときに別のテンプレートで動作し、 - images.render_thumbnailを使用して表示しています。ありがとう。djangoテンプレート - テーブルに画像を表示

Models.py

class Listings(models.Model): 
    createdate = models.DateTimeField(auto_now_add=True) 
    expirydate = models.DateTimeField(null=True, blank=True) 
    price = models.IntegerField(null=True, blank=True) 
    broker_y_n = models.CharField(max_length=1, blank=True, choices=broker, default='n') 
    listing_type = models.ForeignKey(ListingType) 
    listing_status = models.ForeignKey(ListingStatus, default=3) 
    customer = models.ForeignKey(Customer) 

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 render_thumbnail(self): 
     return mark_safe("""<a href = "/media/%s"><img border="0" alt=""  src="/media/%s" /></a>""" % ((self.image.name, self.thumbnail.name))) 
    #render_thumbnail.allow_tags = True 
    def render_thumbnail2(self): 
     return mark_safe("""<a href = "/media/%s"><img border="0" alt="" src="/media/%s" /></a>""" % ((self.image.name, self.thumbnail2.name))) 
    #render_thumbnail.allow_tags = True 
    def __unicode__(self): 
    return self.image.name 

View.py

def details_customer(request, user_id): 
    customer = get_object_or_404(Customer, user=user_id) 
    cusnum=customer.id 
    image = Image.objects.all()  
    listings = Listings.objects.filter(customer=cusnum).values(
     'id', 
     'price', 
     'listing_type__desc', 
     'listing_status', 
     'listing_status__desc', 
     'canoekayak__builder', 
     'image__title', 
     'image__thumbnail', 
     'image__render_thumbnail',   
     ) 
    context = Context({ 
     'title': 'Details', 
     'customer': customer, 
     'image' : image,   
     'listings' : listings, 
     }) 
    return render_to_response('bsmain/details.html', context) 

テンプレートテーブル

<TABLE id="some_id">  
<TBODY> 
    {% load humanize %} 
    {% for row in listings %} 
    <tr> 
     <td>{{ row.id }}</td> 
     <td align="right">{{row.price|intcomma}}</td> 
     <td>{{ row.listing_type__desc}}</td> 
     <td>{{ row.listing_status}}</td> 
     <td>{{ row.listing_status__desc}}</td> 
     <td>{{ row.canoekayak__builder}}</td> 
     <td>{{ row.image__title}}</td> 
     <td>{{ row.image__thumbnail}}</td 
     <td>{{ row.image__render_thumbnail}}</td    
    </tr> 
    {% endfor %} 
</TBODY> 

+1

画像の代わりに何を入手しますか?私はあなたの ''タグが意図せずエスケープされたと思います。 – 9000

+1

1.クエリーセットを「値」を付加しないで直接使用する 2. '/ media /'のようにsrcをハードコードしないでunicode(image.thumbnail)とimage.thumbnail.urlを試してください – okm

+0

ちょっと9000、何もないように、ナダ。 – BillB1951

答えて

2

あなたのコードをより簡単にしたい場合は、私がしたいですapを使うことをお勧めしますplication django-tables2。このアプローチは、テーブルの生成に関するすべての問題を解決できます。ドキュメント・サイスとして

ジャンゴ-tables2はHTML テーブルにデータのセットを回すのタスクを簡素化します。ページネーションとソートをネイティブサポートしています。 のHTMLテーブルではdjango.formsの機能とは何ですか?例えば

その機能は次のとおりです。

  • は任意のiterableは、データ・ソースすることができますが、Djangoのクエリセットのための特別なサポートが含まれています。
  • 組み込みUIはJavaScriptに依存しません。
  • Djangoモデルに基づく自動テーブル生成をサポートしています。
  • サブクラス化によってカスタム列の機能をサポートします。
  • ページネーション。
  • カラムベースのテーブルソート。
  • HTMLへの簡単なレンダリングを可能にするテンプレートタグ。
  • Django 1.3で使用する一般的なビューのミックスイン。

テーブルを作成するのと同じくらい簡単です:

import django_tables2 as tables 

class SimpleTable(tables.Table): 
    class Meta: 
     model = Simple 

これは、ビューで使用されます:

テンプレートで
def simple_list(request): 
    queryset = Simple.objects.all() 
    table = SimpleTable(queryset) 
    return render_to_response("simple_list.html", {"table": table}, 
           context_instance=RequestContext(request)) 

そして最後に:

{% load django_tables2 %} 
{% render_table table %} 

この例では、最も単純なケースの1つである を示していますが、d jango-tables2はさらに多くのことができます!詳細については、documentationの を確認してください。

クエリセットの代わりに辞書を使用することもできます。カスタムテーブルの列HtmlColumn

from django.utils.safestring import mark_safe 
import django_tables2 as tables 

from pytils.numeral import get_plural 
class HtmlColumn(tables.Column): 
    def render(self, value): 
     return mark_safe(value) 

または同じように新しいImageColumnを作成し、唯一SRC属性を転送し、全体ではなくのimgタグのを使用することができ、テーブルセルに画像を表示するための

+0

Rasmus .. django-tables2について教えてくれてありがとう。確認してみるよ。私はデータテーブルを検討してきましたが、まだ決定を下していません。 – BillB1951

+0

jQueryのlib http://datatables.net/を意味する場合は、その両方を使用することをお勧めします。 Django-table2を使用すると、サーバー側の部分、データ表のクライアント側の部分を編成できます。 – ramusus

関連する問題