django-stdimage实现上传图片功能并在xadmin后台显示(超详细,每个环节都有实例)

前言

django通过自带的ImageField可以实现图片上传,如果想在列表页面也显示图片缩略图的话,可以用django-stdimage插件来实现

Django Standardized Image Field

  • Django-Storages兼容(S3)
  • 将图像调整为不同大小
  • 访问模型级别的缩略图,不需要模板标签
  • 保留原始图像
  • 异步渲染(Celery&Co)
  • 多线程和处理以获得最佳性能
  • 限制接受的图像尺寸
  • 将文件重命名为标准化名称(使用可调用的upload_to)

配置环境

1,pip install django==2.1.8

2,pip install pymysql

3,pip install dajngo-stdimage==4.0.1

4,pip install xadmin

xadmin没有配置的可以按照这个地址去配置:  https://blog.csdn.net/qq_42543264/article/details/99078971

models.py

upload_to是图片保存到media下的地址,自动创建

thumbnail可以控制图片在后台显示的大小

class BannerLogo(models.Model):
    """logo管理"""
    lg_name = models.CharField(max_length=50, verbose_name=u'名称')
    image = StdImageField(upload_to='path/to/logo', blank=True,
                          variations={'thumbnail': (100, 75)},
                          verbose_name=u'url'
                          )
    up_time = models.DateTimeField(default=datetime.now, verbose_name=u'上传时间')

    class Meta:
        db_table = 'banner_logo'
        verbose_name = u'logo管理'
        verbose_name_plural = verbose_name

    def image_img(self):
        return u''% (self.image.thumbnail.url)

    image_img.short_description = '图片'
    image_img.allow_tags = True

    def __str__(self):
        return self.lg_name

admin.py

class BannerXadmin(object):
    list_display = ['lg_name', 'image_img', 'image', 'up_time']
    search_fields = ['lg_name', 'up_time']
    list_filter = ['lg_name', 'image', 'up_time']


#注册logo
xadmin.site.register(BannerLogo, BannerXadmin)

我的表结构:

django-stdimage实现上传图片功能并在xadmin后台显示(超详细,每个环节都有实例)_第1张图片

settings.py

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace("\\", '/')

django-stdimage实现上传图片功能并在xadmin后台显示(超详细,每个环节都有实例)_第2张图片

urls.py

django2.+版本和django1.+的版本略有不同,本次操作以2.+以上版本为例

from django.urls import path
from django.conf.urls import re_path
from django.conf.urls import include
import xadmin
from django.views.static import serve
from .settings import MEDIA_ROOT


urlpatterns = [
    path('xadmin/', xadmin.site.urls),     #后台管理

    # 处理图片显示的url,使用Django自带serve,
    # 传入参数告诉它去哪个路径找,我们有配置好的路径MEDIAROOT
    re_path(r'^media/(?P.*)$', serve, {"document_root": MEDIA_ROOT}),
]

以上就是使用django-stdimage插件实现上传图片功能,有什么疑问可以在下方留言,谢谢大家的支持

 

 

 

 

 

你可能感兴趣的:(django)