2

django-photologue私はしばらくいじっていましたが、これは他のすべての画像処理アプリの優れた代替手段であることがわかりました.

django-cumulusただし、アップロードをローカルマシン/サーバーで実行する代わりに、CDN にプッシュすることも使用しています。

imagekit を使用したときは常に a を渡すことができましたupload_to='whatever'が、photologue では imagefield が自動的に挿入されるため、これを行うことができないようです。ある種の上書きを達成するにはどうすればよいですか?

よろしく

4

3 に答える 3

1

インスタンスがデータベースに保存される直前に、Photo モデルの pre_save シグナルにフックして、upload_to フィールドを変更できると思います。

これを見てください: http://docs.djangoproject.com/en/dev/topics/signals/

于 2010-09-02T22:08:53.860 に答える
0

設定 PHOTOLOGUE_PATH を使用して、独自の callable を提供できます。インスタンスとファイル名をパラメーターとして取り、必要なものを返すメソッドを定義します。たとえば、settings.py で:

import photologue

...

def PHOTOLOGUE_PATH(instance, filename):
  folder = 'myphotos' # Add your logic here
  return os.path.join(photologue.models.PHOTOLOGUE_DIR, folder, filename)

おそらく (私はこれをテストしていませんが) Photo インスタンスの詳細 (たとえば、関連する他のインスタンス) を見つけて、それに応じてフォルダーを選択できます。

于 2011-04-06T15:57:48.087 に答える
0

回避策を見つけることができましたが、これには photologue/models.py を変更する必要があります

if PHOTOLOGUE_PATH is not None:
    if callable(PHOTOLOGUE_PATH):
        get_storage_path = PHOTOLOGUE_PATH
    else:
        parts = PHOTOLOGUE_PATH.split('.')
        module_name = '.'.join(parts[:-1])
        module = __import__(module_name)
        get_storage_path = getattr(module, parts[-1])
else:
    def get_storage_path(instance, filename):
        dirname = 'photos'
        if hasattr(instance, 'upload_to'):
            if callable(instance.upload_to):
                dirname = instance.upload_to()
            else: dirname = instance.upload_to
        return os.path.join(PHOTOLOGUE_DIR, 
                        os.path.normpath( force_unicode(datetime.now().strftime(smart_str(dirname))) ), 
                        filename)

次に、アプリ モデルで次の操作を行います。

class MyModel(ImageModel):
    text = ...
    name = ...

    def upload_to(self):
        return 'yourdirectorynamehere'
于 2010-09-03T06:40:11.647 に答える