私はDjango(およびPython)を初めて使用し、他の人のアプリを使用する前に、自分でいくつかのことを解決しようとしました. Django (または Python) のやり方のどこに「適合」するかを理解するのに苦労しています。私が解決しようとしているのは、アップロードされた画像のサイズを変更する方法です。モデルを適切にセットアップして管理者に接続すると、画像がディレクトリに正常にアップロードされます。
from django.db import models
# This is to list all the countries
# For starters though, this will be just United Kingdom (GB)
class Country(models.Model):
name = models.CharField(max_length=120, help_text="Full name of country")
code = models.CharField(max_length=2, help_text="This is the ISO 3166 2-letter country code (see: http://www.theodora.com/country_digraphs.html)")
flag = models.ImageField(upload_to="images/uploaded/country/", max_length=150, help_text="The flag image of the country.", blank=True)
class Meta:
verbose_name_plural = "Countries"
def __unicode__(self):
return self.name
私が今問題を抱えているのは、そのファイルを取得して、新しいファイルをサムネイルにすることです。私が言うように、他のアプリを使用せずにそれを行う方法を知りたいです (今のところ)。DjangoSnippets からこのコードを取得しました。
from PIL import Image
import os.path
import StringIO
def thumbnail(filename, size=(50, 50), output_filename=None):
image = Image.open(filename)
if image.mode not in ('L', 'RGB'):
image = image.convert('RGB')
image = image.resize(size, Image.ANTIALIAS)
# get the thumbnail data in memory.
if not output_filename:
output_filename = get_default_thumbnail_filename(filename)
image.save(output_filename, image.format)
return output_filename
def thumbnail_string(buf, size=(50, 50)):
f = StringIO.StringIO(buf)
image = Image.open(f)
if image.mode not in ('L', 'RGB'):
image = image.convert('RGB')
image = image.resize(size, Image.ANTIALIAS)
o = StringIO.StringIO()
image.save(o, "JPEG")
return o.getvalue()
def get_default_thumbnail_filename(filename):
path, ext = os.path.splitext(filename)
return path + '.thumb.jpg'
...しかし、これは最終的に私を混乱させました...これが私のDjangoアプリにどのように「適合」するかわからないので? 本当に、正常にアップロードされた画像のサムネイルを作成するのに最適なソリューションですか? 私のような初心者がこれを適切に行うことを学ぶことができる、しっかりとした適切な方法を教えてくれる人はいますか? のように、そのようなコード (models.py? forms.py? ...) を配置する場所と、それがコンテキストでどのように機能するかを知っていますか? ... この問題を理解し、解決するために少しだけ助けが必要です。
ありがとうございました!