2

我已经玩django-photologue了一段时间了,发现这是所有其他图像处理应用程序的绝佳替代品。

不过有一件事,我也使用django-cumulus将我的上传推送到我的 CDN,而不是在我的本地机器/服务器上运行它。

当我使用 imagekit 时,我总是可以通过 aupload_to='whatever'但我似乎无法使用 photologue 执行此操作,因为它会自动插入图像字段。我将如何实现某种覆盖?

问候

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/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 回答
0

您可以使用设置 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 实例的更多信息(例如,它与哪些其他实例相关)并相应地选择文件夹。

于 2011-04-06T15:57:48.087 回答