2012-01-16 12 views
1
私はimagekitを使用してい

:だからimagekitDjangoのimagekitとに設けたダイナミックなパス

、私が定義した2つのクラスモデル:

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 /」になります

どうすれば実現できますか?

答えて

1

ImageKitの2つの異なるバージョンを混在しているようです。新しいバージョン(1.0以降)では、内部のIKOptionsクラスを使用しないため、そのすべてが無視されています。 (save_count_as機能も削除されました。)

あなたはキャッシュファイル名を制御したい場合は、ImageSpecコンストラクタはImageFieldupload_toは呼び出し可能-CANのようなcache_to kwargを受け入れます。ここで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) 
関連する問題