django2.0 + xadmin2.0 一次性选择多张图片并存储的一个方法, 以及详情页面多图展示

本文介绍了如何在Django2.0与Xadmin2.0环境下,通过修改Xadmin源码实现图片字段的多选上传,并在详情页面展示多张图片。通过在Xadmin的ImageField处理类中添加代码,将单选变为多选,然后自定义存储逻辑,存储多张图片。此外,文章还补充了详情页面多图展示的实现方法。
摘要由CSDN通过智能技术生成

写在开头: 建议使用源码安装xadmin, 这样可以根据自己实际需求做更灵活的处理
xadmin中图片选择按钮默认是只能单选,如图:
单选按钮
并不能一次性选择多张图片并存储, 这里只需要修改一点xadmin源代码, 就可以实现一次性选择多张图片并存储.
在xadmin源码目录xadmin/plugins/images.py里找到第38行AdminImageWidget这个类:

# xadmin/plugins/images.py 第38行

class AdminImageWidget(forms.FileInput):
   """
   A ImageField Widget that shows its current value if it has one.
   """
   def __init__(self, attrs={
   }):
       super(AdminImageWidget, self).__init__(attrs)

   def render(self, name, value, attrs=None):
       output = []
       if value and hasattr(value, "url"):
           label = self.attrs.get('label', name)
           output.append('<a href="%s" target="_blank" title="%s" data-gallery="gallery"><img src="%s" class="field_img"/></a><br/>%s ' %
                        (value.url, label, value.url, _('Change:')))
       output.append(super(AdminImageWidget, self).render(name, value, attrs))
       return mark_safe(u''.join(output))

AdminImageWidget的注释就说明了它就是xadmin处理ImageField的插件,如果有图片, 就显示当前图片,下面的方法render返回的就包含前面支付截图选项(xadmin是在这里根据加载的数据生成前端页面所需要的a标签并返回-----xadmin管理页面有很多都是这中处理方式), 而选择图片也只需要在return mark_safe前面加上几行代码就可以把单选改为多选:

class AdminImageWidget(forms.FileInput):
    """
    ...
    """
    def render(self, name, value, attrs=None):
        output = []
        if value and hasattr(value, "url"):
            label = self.attrs.get('label', name)
            output.append('<a href="%s" target="_blank" title="%s" data-gallery="gallery"><img src="%s" class="field_img"/></a><br/>%s ' %
                         (value.url, label, value.url, _('Change:')))
        output.append
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值