Джанго-фотолог - PullRequest
       39

Джанго-фотолог

2 голосов
/ 02 сентября 2010

Я какое-то время играл с django-photologue и считаю, что это отличная альтернатива всем остальным приложениям для работы с изображениями.

Но я также использую django-cumulus для отправки своих загрузок в CDN вместо того, чтобы запускать их на локальном компьютере / сервере.

Когда я использовал imagekit, я всегда мог передать upload_to='whatever', но я не могу сделать это с помощью фотолога, поскольку он автоматически вставляет поле изображения. Как мне добиться какого-то перезаписи?

Привет

Ответы [ 3 ]

1 голос
/ 03 сентября 2010

Я думаю, что вы можете подключиться к сигналу pre_save модели Photo и изменить поле upload_to непосредственно перед сохранением экземпляра в базе данных.

Посмотрите на это: http://docs.djangoproject.com/en/dev/topics/signals/

0 голосов
/ 06 апреля 2011

Вы можете использовать настройку PHOTOLOGUE_PATH, чтобы предоставить свой собственный вызываемый.Определите метод, который принимает экземпляр и имя файла в качестве параметров, а затем возвращает все, что вы хотите.Например, в вашем 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 (например, с какими другими экземплярами он связан) и выбрать папку соответственно.

0 голосов
/ 03 сентября 2010

удалось найти обходной путь для этого, однако для этого необходимо внести изменения в 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'
...