2014-04-24 9 views
1

모듈 django-imagekit에서 cachefile_name 속성을 덮어 쓰려고합니다.Django Imagekit은 cachefile_name을 덮어 씁니까?

class Thumb150x150(ImageSpec): 
    processors = [ResizeToFill(150, 150)] 
    format = 'JPEG' 
    options = {'quality': 90} 

    @property 
    def cachefile_name(self): 
     # simplified for this example 
     return "bla/blub/test.jpg" 

register.generator('blablub:thumb_150x150', Thumb150x150) 

class Avatar(models.Model): 
avatar= ProcessedImageField(upload_to=upload_to, 
          processors=[ConvertToRGBA()], 
          format='JPEG', 
          options={'quality': 60}) 
avatar_thumb = ImageSpecField(source='avatar', 
           id='blablub:thumb_150x150') 

그것은 전혀 작동하지 않습니다

여기 내 코드입니다.
cachefile_name을 덮어 쓰지 않고 디버깅하고 cachefile_name의 반환 값을 보면 결과는 "CACHE/blablub/asdlkfjasd09fsaud0fj.jpg"와 같은 문자열입니다. 내 실수는 어디 갔지?

아이디어가 있으십니까?

+0

는이를 사용하여 모델을 포함 할 수 있습니다? –

+0

내 모델 – nuss

+0

을 추가했습니다. ImageSpecField에 spec = Thumb150x150을 전달하려고 했습니까? –

답변

3

예제를 가능한 한 자세히 복제하면 정상적으로 작동합니다. 몇 가지 제안 사항은 다음과 같습니다.

1)보기에서 avatar_thumb을 사용하고 있는지 확인하십시오. 그때까지 "bla/blub/test.jpg"파일은 생성되지 않습니다.

2) MEDIA_ROOT의 구성을 확인하여 "bla/blub/test.jpg"의 표시 위치를 확인하십시오.

제가 작업하고있는 비슷한 예를 들어 보겠습니다. 원래 파일 이름에서 예측할 수있는 고유 한 이름을 미리보기 이미지에 표시하려고했습니다. Imagekit의 기본 스키마는 내가 추측 할 수없는 해시를 기반으로하여 축소판의 이름을 지정합니다. 대신이의 :

media/12345.jpg 
media/CACHE/12345/abcde.jpg 

나는 이것을 원 :

media/photos/original/12345.jpg 
media/photos/thumbs/12345.jpg 

나는 "엄지 손가락"디렉토리에 결국 내 캐시 된 모든 파일을 원하지 않았기 때문에 재정 IMAGEKIT_SPEC_CACHEFILE_NAMER 그냥 작동하지 않았다 특정 모델의 특정 필드에서 생성 된 것.

그래서 나는이 ImageSpec 서브 클래스를 생성하고 등록 :

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) 

을 그리고 이런 내 모델에 사용 :

# 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') 
0

올바른 방법은 IMAGEKIT_SPEC_CACHEFILE_NAMER으로 설정하는 것입니다. 기본 네이머 names.py을 살펴 보시고, settings.IMAGEKIT_CACHEFILE_DIR 파일 경로와 해시를 조인하십시오. 아마도 똑같이해야 할 것입니다.