django admin 怎么通过url显示图片、通过ImageField 显示图片 / 覆写admin的界面

部分参考:
狂奔的虾米https://www.jianshu.com/p/ea7cb7c44a1e
无名小妖https://www.cnblogs.com/wumingxiaoyao/p/6928297.html

今天在写django 的 admin后台时,发现一个问题啊,

django admin 怎么通过url显示图片、通过ImageField 显示图片 / 覆写admin的界面_第1张图片

后台的图片是以url的形式展示的,看起来很不直观啊,要怎么改变它呢?

在简书找到了一个办法:

class Product(models.Model):
    # ... other fields
    image = models.ImageField(u'图片', upload_to='photos/%Y/%m/%d')

# 在admin.py中定义模型对应的admin展示方式
from django.utils.safestring import mark_safe
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = ('name', 'image_data')
    readonly_fields = ('image_data',)  #必须加这行 否则访问编辑页面会报错
    def image_data(self, obj):
        return mark_safe(u'< img src="%s" width="100px" />' % obj.image.url)
    # 页面显示的字段名称
    image_data.short_description = u'品牌图片'

但这对我并不适用啊,我的model中:


job_pic = models.CharField(verbose_name='兼职图片',max_length=100)

别问我为什么要用CharField来保存图片,再自己把文件写入media路径下这么麻烦。。。

自己造的孽,自己填,业务代码不方便展示,仿照上面的代码,CharField的话这么写:

# models.py:
from django.utils.html import format_html
class Product(models.Model):
    # ... other fields
    image_url = models.CharField(verbose_name='图片',max_length=100)

    def image_data(self):
        return format_html(
            '',
            self.image_url,
        )
    image_data.short_description = u'图片'
# admin.py:
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = ('name', 'image_data')

对的,没错,就是这么简单!

现在访问admin,你惊讶的发现有图了。

django admin 怎么通过url显示图片、通过ImageField 显示图片 / 覆写admin的界面_第2张图片

其实ImageField的话, 也可以不按我转的那个那样写,可以这么写:

from django.utils.html import format_html
class Product(models.Model):
    # ... other fields
    image = models.ImageField(u'图片', upload_to='photos/%Y/%m/%d')

    def image_data(self):
        return format_html(
            '',
            self.image.url,
        )
    image_data.short_description = u'图片'
# admin.py:
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = ('name', 'image_data')
    readonly_fields = ('image_data',)

是不是差不多?

相信机智的你一定领悟了怎么覆写admin界面了吧~

–补充说明:
short_description为设置标题
readonly_fields为设置该列不可编辑

你可能感兴趣的:(django admin 怎么通过url显示图片、通过ImageField 显示图片 / 覆写admin的界面)