<p>尽可能地复制这个例子,效果很好。一些建议是:</p>
<p>1)确保在视图中使用的是虚拟人物拇指。文件“bla/blub/测试.jpg“在此之前不会生成。在</p>
<p>2)检查媒体根目录的配置,确保您知道“bla/blub”在哪里/测试.jpg“预计会出现。在</p>
<p>让我举一个类似的例子。我想给我的缩略图唯一的名字,可以预测从原来的文件名。Imagekit的默认方案基于散列来命名缩略图,我猜不出来。而不是这样:</p>
<pre><code>media/12345.jpg
media/CACHE/12345/abcde.jpg
</code></pre>
<p>我想要这个:</p>
^{pr2}$
<p>重写IMAGEKIT_SPEC_CACHEFILE_NAMER不起作用,因为我不希望所有缓存的文件都位于“thumbs”目录中,而只是那些从特定模型中的特定字段生成的文件。在</p>
<p>所以我创建了这个ImageSpec子类并注册了它:</p>
<pre><code>class ThumbnailSpec(ImageSpec):
processors=[Thumbnail(200, 200, Anchor.CENTER, crop=True, upscale=False)]
format='JPEG'
options={'quality': 90}
# put thumbnails into the "photos/thumbs" folder and
# name them the same as the source file
@property
def cachefile_name(self):
source_filename = getattr(self.source, 'name', None)
s = "photos/thumbs/" + source_filename
return s
register.generator('myapp:thumbnail', ThumbnailSpec)
</code></pre>
<p>然后在我的模型中这样使用它:</p>
<pre><code># provide a unique name for each image file
def get_file_path(instance, filename):
ext = filename.split('.')[-1]
return "%s.%s" % (uuid.uuid4(), ext.lower())
# store the original images in the 'photos/original' directory
photoStorage = FileSystemStorage(
location=os.path.join(settings.MEDIA_ROOT, 'photos/original'),
base_url='/photos/original')
class Photo(models.Model):
image = models.ImageField(storage=photoStorage, upload_to=get_file_path)
thumb = ImageSpecField(
source='image',
id='myapp:thumbnail')
</code></pre>