前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django Admin Show Image from Imagefield(Django admin 图片预览)

Django Admin Show Image from Imagefield(Django admin 图片预览)

作者头像
卓越笔记
发布2023-02-18 14:24:13
5640
发布2023-02-18 14:24:13
举报
文章被收录于专栏:卓越笔记

在 Django 管理后台中,图片字段(ImageField)默认是显示路径,期望能看到图片预览图。

编写 ImageWidgetAdmin

继承 admin.ModelAdmin, 编写自己的 image admin

代码语言:javascript
复制
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
@author: yinzhuoqun
@site: http://xieboke.net/
@email: yin@zhuoqun.info
@time: 2020/4/15 11:13
"""

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):
    # django 2.2
    # def render(self, name, value, attrs=None, renderer=None):
    #     """Render the widget as an HTML string."""
    #     context = self.get_context(name, value, attrs)
    #     return self._render(self.template_name, context, renderer)

    # def render(self, name, value, attrs=None):  # django 1.11
    def render(self, name, value, attrs=None, renderer=None):  # django 2.2
        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(u' <a href="%s" target="_blank"><img src="%s" alt="%s" /></a>' % \
                          (image_url, image_url, file_name))
        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)

使用 ImageWidgetAdmin

代码语言:javascript
复制
# models.py
class AD(models.Model):
    """
    广告内容
    """
    title = models.CharField(verbose_name="标题", max_length=250, unique=True)
    cover = models.ImageField(verbose_name="封面", max_length=250, upload_to="ad/", blank=True, null=True)

# admins.py, ImageWidgetAdmin
class IndividualBirdAdmin(ImageWidgetAdmin):
    image_fields = ['cover', ]  # 图片预览的字段名

图片预览效果

来源 / 出处

https://stackoverflow.com/questions/16307307/django-admin-show-image-from-imagefield#

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-4-15 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编写 ImageWidgetAdmin
  • 使用 ImageWidgetAdmin
  • 图片预览效果
  • 来源 / 出处
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档