0

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

4

1 回答 1

5

你可以做几个相互关联的模型,然后TabularInline在 django-admin 中添加图像,比如:

# 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

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

于 2012-05-22T00:22:58.610 回答