7

以前は特定のサイズの画像を生成していた、ユーザーがアップロードした画像の動的にサイズ変更されたサムネイルの作成を開始する必要があるプロジェクトがあります。次のような画像を表す既存のモデルがあります。

class Image(models.Model):
  original = models.URLField()
  small = models.URLField()
  medium = models.URLField()
  large = models.URLField()

それらのそれぞれには、S3上のそれぞれの画像へのURLが入力されています。アップロード時に、すべてのバージョンが作成され(実際には、スケジュールされたタスクを介して直後に)、S3に保存されてから、モデルに設定されます。今後、私たちのデザインではサムネイルごとにさまざまなサイズが必要になるため、それらすべてをデータベースに保存することは現実的ではありません。originalテンプレートに残りをオンザフライで保持して実行したいと思います。

だから、これは私がsorl-thumbnailに来るところです。それは私がやりたいことをすることを意図しているようですが、それがどのように機能するのかについては少し迷っています(現時点ではそうではありません)。私が行ったテストとして、チュートリアルのように、いくつかの画像を一覧表示し、それらをサムネイル化しようとする基本的なビュー/テンプレートを作成しました。

{% for img in image_set %}
  {% thumbnail img.original "180x180" crop="center" format="PNG" as im %}
  <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
  {% endthumbnail %}
{% endfor %}

cache/84/8f/848fb078f2e8d35aecd92150c6fa6843.pngその結果、 (404s)のようなファイルのURLが生成されます。このファイルがどこに保存されるのかわかりません。S3ファイルを取得して、どこかにサムネイルを作成していると思いますが、それがどこにあるのか、どこから提供するのかがわかりません。これはすべてローカル開発サーバー上にあり、memcachedを使用しています(キャッシュエントリが設定されていることがわかります)。PILは、jpeg/pngをサポートする私の環境にインストールされます。

4

1 に答える 1

6

Django-storagesを確認することをお勧めします。これは、問題を修正する優れたAWS S3でした。django -storageはbotoに依存しているため、それに加えてbotoもインストールします。

次に、settings.pyに以下を追加する必要があります

import os

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = '<YOUR BUCKET NAME>'

STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

STATIC_URL = 'http://' + AWS_STORAGE_BUCKET_NAME + '.s3.amazonaws.com/'
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

その後、キャッシュはAWSS3自体に保存されます。

お役に立てば幸いです

注:セキュリティ上の理由から、AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYを、setting.pyに直接書き留めるのではなく、環境変数として追加することをお勧めします。

于 2012-10-11T21:16:19.227 に答える