1

我正在使用提供的 imagekit:imagekit

所以,我定义了两个类模型:

class Photo(models.Model):
    #photo_wrapper = models.ForeignKey(PhotoWrapper, blank=True, null=True)
    original_image = models.ImageField(upload_to='static/photos')
    thumbnail = ImageSpec([Adjust(contrast=1.2, sharpness=1.1),
            resize.Crop(50, 50)], image_field='original_image',
            format='JPEG', quality=90)
    num_views = models.PositiveIntegerField(editable=False, default=0)

    class IKOptions:
        # This inner class is where we define the ImageKit options for the model
        spec_module = 'myspecs.specs'
        cache_dir = 'static/photos'
        image_field = 'original_image'
        save_count_as = 'num_views'

class Country(models.Model):       
    country_name = models.CharField(max_length=250)        
    country_photo = models.ForeignKey(Photo, blank=True, null=True)

    def __unicode__(self):
            return '%s' % self.country_name 

问题是每张照片都是在“静态/照片”路径中创建的。我的意图是根据国家名称使用动态路径保存图像和缩略图。

例如,对于国家“Argentina”,动态路径将为“static/photos/Argentina/”

我怎样才能做到这一点?

4

1 回答 1

1

看起来您正在混合两个不同版本的 ImageKit。较新的版本(1.0+)不再使用内部IKOptions类,所以所有这些都被忽略了。(也删除了 save_count_as 功能。)

如果你想控制缓存文件名,ImageSpec构造函数接受一个cache_tokwarg,它像ImageField's upload_to- 可以是一个可调用的。这是当前的文档cache_to

Specifies the filename to use when saving the image
cache file. This is modeled after ImageField's ``upload_to`` and
can be either a string (that specifies a directory) or a
callable (that returns a filepath). Callable values should
accept the following arguments:

    - instance -- The model instance this spec belongs to
    - path -- The path of the original image
    - specname -- the property name that the spec is bound to on
        the model instance
    - extension -- A recommended extension. If the format of the
        spec is set explicitly, this suggestion will be
        based on that format. if not, the extension of the
        original file will be passed. You do not have to use
        this extension, it's only a recommendation.

所以你只需要创建一个接受这些参数并返回你想要的路径的函数,并在你的模型中使用它,如下所示:

class Photo(models.Model):
    thumbnail = ImageSpec(..., cache_to=my_cache_to_function)
于 2012-01-30T23:39:21.723 回答