我是Django(和Python)的新手,在尝试使用其他人的应用程序之前,我一直在尝试自己做一些事情。我在理解事物在Django(或Python)的执行方式中“适合”何处时遇到了麻烦。我要解决的问题是上传图片后如何调整图片大小。我已经很好地设置了模型并插入了admin,并且图像可以很好地上传到目录:
from django.db import models # This is to list all the countries # For starters though, this will be just United Kingdom (GB) class Country(models.Model): name = models.CharField(max_length=120, help_text="Full name of country") code = models.CharField(max_length=2, help_text="This is the ISO 3166 2-letter country code (see: http://www.theodora.com/country_digraphs.html)") flag = models.ImageField(upload_to="images/uploaded/country/", max_length=150, help_text="The flag image of the country.", blank=True) class Meta: verbose_name_plural = "Countries" def __unicode__(self): return self.name
我现在遇到的麻烦是获取该文件并将新文件制作为缩略图。就像我说的那样,我想知道如何在不使用他人应用程序的情况下进行操作(目前)。我从DjangoSnippets获得了以下代码:
from PIL import Image import os.path import StringIO def thumbnail(filename, size=(50, 50), output_filename=None): image = Image.open(filename) if image.mode not in ('L', 'RGB'): image = image.convert('RGB') image = image.resize(size, Image.ANTIALIAS) # get the thumbnail data in memory. if not output_filename: output_filename = get_default_thumbnail_filename(filename) image.save(output_filename, image.format) return output_filename def thumbnail_string(buf, size=(50, 50)): f = StringIO.StringIO(buf) image = Image.open(f) if image.mode not in ('L', 'RGB'): image = image.convert('RGB') image = image.resize(size, Image.ANTIALIAS) o = StringIO.StringIO() image.save(o, "JPEG") return o.getvalue() def get_default_thumbnail_filename(filename): path, ext = os.path.splitext(filename) return path + '.thumb.jpg'
…但是这最终使我感到困惑…因为我不知道它如何“适合”我的Django应用程序?确实,这是仅对成功上传的图像进行缩略图制作的最佳解决方案吗?谁能向我展示一种良好,扎实,体面的方式,让像我这样的初学者可以学会正确地做到这一点?就像在那儿一样,知道将这类代码放在哪里(models.py?forms.py?…),以及如何在上下文中工作?…我只需要一点帮助来理解和解决这个问题。
谢谢!
如果您觉得还可以,那么您已经准备好一个Django应用程序,按照您的要求进行操作:https : //github.com/sorl/sorl-thumbnail