2009年11月9日月曜日

Django 管理画面のリストに画像を追加


 管理画面から Item を削除するとき、画像も一緒に削除できないかと探していたら、こんなページを発見

 管理画面の一覧に画像を表示することもやりたいことのひとつだったので、さっそく挑戦。

 なんだかんだと2時間近くかかって実装。
    def thumb(self):
tinythumb = unicode(self.photo11).replace('\\','/').split('/')
tinythumb[-1] = 'tiny/'+tinythumb[-1]
tinythumb = '/'.join(tinythumb)
if not os.path.exists(settings.MEDIA_ROOT+tinythumb):
im = Image.open(settings.MEDIA_ROOT+unicode(self.photo11))
im.thumbnail(TINY_SIZE,Image.ANTIALIAS)
im.save(settings.MEDIA_ROOT+tinythumb,"JPEG")
return """tiny thumbnail image"""%(settings.MEDIA_URL,unicode(self.photo11),settings.MEDIA_URL,tinythumb)
thumb.allow_tags = True
thumb.short_description = 'XXXX'

 元が 0.96 用だったせいもあってだいぶ嵌った
・オリジナルは models.ImageField を単なる文字列として扱っているが、unicode()で括ってやらないと文字列操作のメソッドが使えない
・Image.save() で書き込むときは、ディレクトリがないとだめ。models.ImageField のときは勝手に作ってくれたのに...
・html に吐き出す url の文字列でだいぶ悩む。結局もとの media を site_media に変更。URL の root からアプリケーションを動かして嵌ったのは2度目。そろそろ覚えんと。

aptana のデバッグ機能がなければ、今回は歯が立たなかったかも。

0 件のコメント:

コメントを投稿