【问题标题】:Uploading Images in Django Admin在 Django Admin 中上传图片
【发布时间】:2012-05-28 11:26:09
【问题描述】:

我有一个包含城市的 Django 数据库。我想使用 Django 管理面板将每个城市的多张图片上传到我的服务器中的某个文件夹中,例如 /images/country_name/state/city/。这可能会被添加到城市管理表单中,因此图像和信息都可以在一个页面上进行编辑。我还需要选择一个主图像并将其转换为缩略图,以便可以在搜索结果中使用它。实现此类功能的好方法是什么?有没有好的 django 插件可以帮助我完成这些任务?

【问题讨论】:

    标签: python django image admin thumbnails


    【解决方案1】:

    你可以做几个相互关联的模型,并将图像添加为 django-admin 中的TabularInline,例如:

    # models.py
    class City(models.Model):
        # your fields
    
    class CityImage(models.Model):
        city = models.ForeignKey('City', related_name='images')
        image = models.ImageField(upload_to=image_upload_path)
    
    # admin.py
    from django.contrib import admin
    from myapp.models import City, CityImage
    
    
    class CityImageInline(admin.TabularInline):
        model = CityImage
    
    
    class CityAdmin(admin.ModelAdmin):
        inlines = [CityImageInline]
    
    
    admin.site.register(City, CityAdmin)
    

    至于缩略图,您需要在 City 模型中确定要用作缩略图的相关图像,然后执行以下操作:

    import Image
    try:
        from cStringIO import StringIO
    except ImportError:
        from StringIO import StringIO
    from django.core.files.base import ContentFile
    
    # other imports and models
    
    class City(models.Model):
        # your fields
    
        def get_thumbnail(self, thumb_size=None):
            # find a way to choose one of the uploaded images and
            # assign it to `chosen_image`.
            base = Image.open(StringIO(chosen_image.image.read()))  # get the image
    
            size = thumb_size
            if not thumb_size:
                # set a default thumbnail size if no `thumb_size` is given
                rate = 0.2  # 20% of the original size
                size = base.size
                size = (int(size[0] * rate), int(size[1] * rate))
    
            base.thumbnail(size)  # make the thumbnail
            thumbnail = StringIO()
            base.save(thumbnail, 'PNG')
            thumbnail = ContentFile(thumbnail.getvalue())  # turn the tumbnail to a "savable" object
            return thumbnail
    

    我希望这会派上用场! :)

    【讨论】:

    • 可以动态改变ImageField的上传路径吗?这样我就可以将图像上传到 /images/country_name/state_name/city_name/ 例如?
    • 是的,你可以。 upload_to 可以是返回路径的函数。看看这个:docs.djangoproject.com/en/1.4/ref/models/fields/…
    猜你喜欢
    • 2011-07-24
    • 2022-01-25
    • 1970-01-01
    • 2018-12-11
    • 2010-10-29
    • 1970-01-01
    • 2018-11-29
    • 2018-02-05
    • 2014-03-20
    相关资源
    最近更新 更多