ぷろぐら×でざいん

Python DjangoAdminの一覧に画像を表示させる

Python DjangoAdminの一覧に画像を表示させる

Python DjangoAdminの一覧に画像を表示させる

概要

DjangoのAdmin画面って本当に便利ですよね。Modelを定義して、それをModelAdminに渡すだけでCRUDだけでなく、一覧リストも作成できますし、初期開発時にはDjangoAdminをどれだけ上手に利用するだけでだいぶスピード感が変わって来ますね。ただ、DjangoAdminはあまりにも用意されし過ぎてて汎用性に欠けると思われている人が多いようです。

私も最初はそう思っていました。検索機能もソート、さらにはページングもできるとなれば、別に汎用性なくても良くね?と思いましたし、そもそも機能追加できるの?と思っていました。調べてみると意外と機能追加ができるようで、慣れれば感覚的に機能追加できるようになります。ということで今回は一覧のリストに写真を表示するコードを書いてみました。少しでも皆様の参考になれば幸いです。

 


ソースコード

Modelを定義する

# models.py
# -*- coding: utf-8 -*-
from django.db import models
from django.utils.safestring import mark_safe


class SampleModel(models.Model):
    title = models.CharField(max_length=255)
    url = models.URLField(default='')

    @property
    def image_tag(self):
    	return mark_safe(u'<img src="{}" />'.format(self.url)

ここでは @propertyでHTMLを返す処理を追加しておくことです。@propertyはAdmin側でも呼び出すことができるので結構便利です。


Adminを定義する

# admin.py
# -*- coding: utf-8 -*-
from django.contrib import admin
from ..models import SampleModel


class SampleAdmin(admin.ModelAdmin)
	list_display = ('image_tag', 'id', 'title',)
    list_display_links = ('id', 'title',)


admin.site.register(SampleModel, SampleAdmin)

そしてAdmin側にModelに定義した@propertyを list_display に定義することで画像が表示されます。


イメージ

モザイクばかりで大変恐縮ですが、こんな感じになります。list_displayの定義順がカラムの順序になるので右寄せ、左寄せなどが可能でしょう。また、@propertyの中にCSSを定義することで画像の大きさなども調整できると思いますのでいろいろ試してみてください。


あとがき

カラオケいきたいです。私はカラオケ行くと、誰も知らないボーカロイドばかり歌っています。しかも自分で言うのもあれですが決して上手じゃないです。それでも多分しばらく私はボーカロイドの歌を歌い続けると思います。あーカラオケいきたいなー。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です