사용자가 여러 이미지를 한 번에 업로드 할 수 있어야하는 장고 프로젝트를 진행 중입니다. 더 나은 제안이 없다면 프로젝트의 해당 부분이 SWFUpload에 의해 처리 될 것입니다.여러 이미지를 지원하기 위해 django-stdimage2 해킹
이미지 이름 바꾸기, 크기 조정 및 미리보기 이미지 작성은 django-stdimage2으로 처리됩니다.
문제점
장고 stdimage2 필드 이름을 이용하여 각 이미지를 바꾸고 기본 키 오브젝트. 기본 키 1이있는 기어 행에 5 개의 이미지가있는 경우, 5 개의 이미지 모두 "image_1.jpeg"로 이름이 바뀝니다.
가능한 해결책을 소개하기 전에 다음은 제 모델입니다. 기본적으로 하나의 기어 행에는 여러 개의 gear_image 행이있을 수 있습니다.
class gear(models.Model):
id = models.AutoField(primary_key=True)
model = models.CharField(max_length=100)
class gear_images(models.Model):
id = models.AutoField(primary_key=True)
gear_id = models.ForeignKey(gear)
image = StdImageField(upload_to='images/gear', blank=True, size=(640, 480, True), thumbnail_size=(100, 100, True))
솔루션
내가 파일 이름에 밀리 초 둥근에, 타임 스탬프를 추가하는 생각을했다. 저는 파이썬이나 장고 프로도 아니지만 django-stdimage2의 fields.py 파일을 훑어 보았습니다. 나는이 코드를 편집하기 위해 필요한 코드가 있다고 생각합니다. 같은 보일 것
def _rename_resize_image(self, instance=None, **kwargs):
'''
Renames the image, and calls methods to resize and create the thumbnail
'''
if not kwargs.get('raw', None):
if getattr(instance, self.name):
filename = getattr(instance, self.name).path
ext = os.path.splitext(filename)[1].lower().replace('jpg', 'jpeg')
# time_stamp = int(round(time.time() * 1000))
# dst = self.generate_filename(instance, '%s_%s_%s%s' % (self.name, instance._get_pk_val(), time_stamp, ext))
dst = self.generate_filename(instance, '%s_%s%s' % (self.name, instance._get_pk_val(), ext))
dst_fullpath = os.path.join(settings.MEDIA_ROOT, dst)
if os.path.normcase(os.path.abspath(filename)) != os.path.normcase(os.path.abspath(dst_fullpath)):
os.rename(filename, dst_fullpath)
if self.size:
self._resize_image(dst_fullpath, self.size)
if self.thumbnail_size:
thumbnail_filename = self._get_thumbnail_filename(dst_fullpath)
shutil.copyfile(dst_fullpath, thumbnail_filename)
self._resize_image(thumbnail_filename, self.thumbnail_size)
setattr(instance, self.attname, dst)
instance.save()
각 이미지 이름 : image_1_159753456.jpeg
당신이 좋은 해결 방법입니다 생각하십니까 주석 처리되어 코드의 두 라인은 내 제안 된 솔루션입니까? 나는 다른 아이디어도 열려 있습니다.
정말 고맙습니다. 당신의 설명이 의미가 있으며 나는 그것을 시험 할 것입니다. 나는 그런 식으로 생각 했어야했지만, 최근에는 다른 코딩 문제로 인해 마음이 어지럽게 흩어졌습니다. 감사 :) –