Created 2018年5月30日16:44
Updated 2019年2月3日18:47
Categories
Django
Python
DjangoでImageFieldを利用する際、下画像のように管理画面にサムネイルを一覧表示する方法を調べました。
今回は Django2.0.5 を使ったのですが、1.xの方法ではうまくいかなかったのでメモ。
models.py
class Image(models.Model):
image = models.ImageField(upload_to="/image")
というモデルクラスに対して、
admin.py
class ImageAdmin(admin.ModelAdmin):
list_display = ["image_tag"]
def image_tag(self, obj):
return '<image src="{}" />'.format(obj.image)
image_tag.allow_tags = True
admin.site.register(Image, ImageAdmin)
で表示できましたが、Django 2.0ではタグが文字列で表示されてしまいうまくいきません。
インジェクションの危険性のない安全な文字列に対しては、以下のようにmark_safe関数を通すことで、タグとして描画できるようになるようです。
admin.py
from django.utils.safestring import mark_safe
class ImageAdmin(admin.ModelAdmin):
list_display = ["image_tag"]
def image_tag(self, obj):
return mark_safe('<image src="{}" />'.format(obj.image.url))
admin.site.register(Image, ImageAdmin)
mark_safeと言えばDjangoのテンプレートにコードから生成したHTMLを描画する時にもお世話になりました。
image_tag.allow_tags = True
するより、mark_safe関数を通す方が何をやっているか分かりやすくて良いですね。