0
응용 프로그램에 대한 첫 번째 정보 : 나는 pdf 파일을 업로드 할 수 있기를 원하며 그 pdf 파일은 이미지로 변환됩니다 (모든 pdf 페이지 한 이미지). 이러한 이미지는 다음 웹 사이트에 표시되고 PDF로 다운로드 할 수 있습니다m2m_changed 신호를 사용하여
def upload_to(path):
def upload_callback(instance, filename):
return '%s' % os.path.join(settings.MEDIA_ROOT, path, str(instance), filename)
return upload_callback
class Document(models.Model):
name = models.TextField()
pdf_file = models.FileField(upload_to=upload_to('pdfs'))
images = models.ManyToManyField('Image', null=True, blank=True)
class Image(models.Model):
image = models.ImageField(upload_to='pdfimages')
지금은 문서 클래스의 저장 기능을 덮어 이미지와 이미지 개체를 만들 : 지금까지 나는이이 나는 모습을 다음과 같이하십시오 :
def save(self, *args, **kwargs):
path = os.path.join(settings.MEDIA_ROOT, 'pdfs', self.name)
imagepath = os.path.join(settings.MEDIA_ROOT, 'pdfimages')
if os.path.exists(path):
for file_ in os.listdir(path):
if file_ == self.pdf_file.name:
continue
super(Document, self).save(*args, **kwargs)
save_to = os.path.join(path, os.path.splitext(self.pdf_file.name)[0] +
'_page.png')
pdffile = os.path.join(path, self.pdf_file.name)
args = ['convert', '-density', '100', '-depth',
'8', '-quality', '85', pdffile, save_to ]
subprocess.check_call(args, stdout=sys.stdout, stderr=sys.stderr)
for file_ in os.listdir(path):
if file_.endswith('png'):
try:
shutil.move((os.path.join(settings.MEDIA_ROOT,
'pdfs', self.name, file_)),
imagepath)
except Exception:
pass
for file_ in os.listdir(imagepath):
i, created = Image.objects.get_or_create(image="pdfimages/%s" % file_)
첫 번째 코드는 그리 좋지 않지만 두 번째로 중요한 행동은 아직 없습니다. 문서에 이미지를 추가하면 m2m 관계가 업데이트됩니다. 이제 두 가지 질문이 있습니다.
- 위의 코드를 더 잘 쓸 수 있습니까? (대부분 코드의 중간에) **, * 을 kwargs로를 인수를
슈퍼 (문서, 자기) .save을 (좋아하지 않는다. 나는 m2m_changed 신호 보았던 M2M 업데이트
- 하지만, 솔직히 그것을 사용하는 방법을 이해하지
편집 :.. 당신이 parametere을 이해하면
그것은, 사실은 꽤 쉽게 t 행크