django photologue上传至

django photologue上传至,django,django-models,django-apps,photologue,Django,Django Models,Django Apps,Photologue,我一直在玩django photologue有一段时间了,我发现这是所有其他图像处理应用程序的绝佳替代品 不过有一件事,我还使用了django cumulus将上传的内容推送到CDN,而不是在本地机器/服务器上运行它 当我使用imagekit时,我总是可以将一个upload\u传递给class='whatever',但我似乎无法使用photologue来完成这一操作,因为它会自动插入imagefield。我将如何实现某种覆盖 关于我认为您可以挂接照片模型的pre_save信号,并在实例保存到数据

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

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

当我使用imagekit时,我总是可以将一个
upload\u传递给class='whatever'
,但我似乎无法使用photologue来完成这一操作,因为它会自动插入imagefield。我将如何实现某种覆盖


关于

我认为您可以挂接照片模型的pre_save信号,并在实例保存到数据库之前更改upload_to字段

看看这个:

设法找到了解决方法,但这需要您在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'

您可以使用设置PHOTOLOGUE_路径来提供您自己的可调用。定义一个以实例和文件名为参数的方法,然后返回您想要的任何内容。例如,在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)

想必(虽然我没有测试过),您可以找到更多关于照片实例的信息(例如,它与哪些其他实例相关),并相应地选择文件夹。

好的,我会研究一下,但是我倾向于根据项目的某些方面使用不同的CDN。你还会推荐这种方式吗?@ApPel,我更喜欢任何不改变第三方代码的方式(在这种情况下是photologue)。在信号处理程序中,您可以确定要存储的路径。