我有一个充满城市的Django数据库。我想使用Django管理面板将每个城市的多张图片上传到我的服务器,例如/ images / country_name / state / city /。这可能会添加到城市管理员表单中,因此图像和信息都可以在一个页面上进行编辑。我还需要选择主图像并将其转换为缩略图,以便可以在搜索结果中使用。有哪些实现此类功能的好方法?有没有好的django插件可以帮助我完成这些任务?
答案 0 :(得分:4)
你可以做几个相互关联的模型,并在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
我希望这会派上用场! :)