Django admin's list_displayに画像のサムネイルを表示しようとしていますが、次のようにしています。
from Django.utils.safestring import mark_safe
class PhotoAdmin(admin.ModelAdmin):
fields = ('title', 'image',)
list_display = ('title', '_get_thumbnail',)
def _get_thumbnail(self, obj):
return mark_safe(u'<img src="%s" />' % obj.admin_thumbnail.url)
文字列を安全としてマークしましたが、管理者はサムネイルをエスケープされたhtmlとして表示し続けます。私は何が間違っているのですか?
Django 1.9以降、 format_html()
、 format_html_join()
、または-を使用できます。 _allow_tags
_ メソッド内。詳細については _list_display
_ ドキュメントを参照してください。
_mark_safe
_を使用した質問のコードは機能します。ただし、これらのようなメソッドのより良いオプションは、引数をエスケープする_format_html
_である可能性があります。
_def _get_thumbnail(self, obj):
return format_html(u'<img src="{}" />', obj.admin_thumbnail.url)
_
以前のバージョンのDjangoでは、mark_safe()
を使用しても機能せず、Djangoは出力をエスケープしていました。解決策は、メソッドに_allow_tags
_属性を指定することでした。値をTrueに設定します。
_class PhotoAdmin(admin.ModelAdmin):
fields = ('title', 'image',)
list_display = ('title', '_get_thumbnail',)
def _get_thumbnail(self, obj):
return u'<img src="%s" />' % obj.admin_thumbnail.url
_get_thumbnail.allow_tags = True
_