85

アップロードされた画像を list_display に表示することはできますが、モデルごとのページ (モデルを変更するために取得するページのように) でこれを行うことは可能ですか?

簡単なサンプル モデルは次のようになります。

Class Model1(models.Model):
    image = models.ImageField(upload_to=directory)

デフォルトの管理者は、アップロードされた画像の URL を表示しますが、画像自体は表示しません。

ありがとう!

4

13 に答える 13

135

もちろん。モデル クラスに次のようなメソッドを追加します。

def image_tag(self):
    from django.utils.html import escape
    return u'<img src="%s" />' % escape(<URL to the image>)
image_tag.short_description = 'Image'
image_tag.allow_tags = True

そしてあなたのadmin.py追加で:

fields = ( 'image_tag', )
readonly_fields = ('image_tag',)

あなたにModelAdmin。画像フィールドの編集機能を制限したい場合は、必ずexclude属性に追加してください。

注: Django 1.8 と readonly_fields の「image_tag」のみでは、表示されませんでした。フィールドに「image_tag」のみを使用すると、不明なフィールドのエラーが発生しました。正しく表示するには、フィールドと readonly_fields の両方で必要です。

于 2013-04-30T19:29:55.293 に答える
19

Django 1.9の場合 、編集ページでファイル パスの代わりに画像を表示するには、ImageWidget を使用すると便利です。

from django.contrib.admin.widgets import AdminFileWidget
from django.utils.translation import ugettext as _
from django.utils.safestring import mark_safe
from django.contrib import admin


class AdminImageWidget(AdminFileWidget):
    def render(self, name, value, attrs=None):
        output = []
        if value and getattr(value, "url", None):
            image_url = value.url
            file_name = str(value)
            output.append(u' <a href="%s" target="_blank"><img src="%s" alt="%s" /></a> %s ' % \
                          (image_url, image_url, file_name, _('Change:')))
        output.append(super(AdminFileWidget, self).render(name, value, attrs))
        return mark_safe(u''.join(output))


class ImageWidgetAdmin(admin.ModelAdmin):
    image_fields = []

    def formfield_for_dbfield(self, db_field, **kwargs):
        if db_field.name in self.image_fields:
            request = kwargs.pop("request", None)
            kwargs['widget'] = AdminImageWidget
            return db_field.formfield(**kwargs)
        return super(ImageWidgetAdmin, self).formfield_for_dbfield(db_field, **kwargs)

使用法:

class IndividualBirdAdmin(ImageWidgetAdmin):
    image_fields = ['thumbNail', 'detailImage']

フィールドの画像が表示されthumbNaildetailImage

于 2015-09-25T22:10:56.207 に答える