获取文件上传以使用Django& Cloudinary

时间:2014-07-23 22:35:18

标签: django cloudinary

我正在尝试将Cloudinary用作CDN,并且在使文件上传正常工作时遇到一些麻烦。我已经关注他们的博客帖子和网站,但我遇到了一致且非常恼人的错误。

我有一个与图像(封面照片)和媒体对象(PDF或电子书,如.mobi或.epub)相关联的模型。我有一个模型表单设置来创建一个对象:

class NewMediaObjectForm(forms.ModelForm):

    class Meta:
        model = MediaObject
        fields = ('cover_photo', ...)
        cover_photo = CloudinaryJsFileField(options={'tags': 'cover_photo'})

现在,我已阅读this tutorial from Cloudinary,我知道他们的表单如下:

class NewMediaObjectForm(forms.ModelForm):

    class Meta:
        model = MediaObject
        fields = ('cover_photo', ...)
    cover_photo = CloudinaryJsFileField(options={'tags': 'cover_photo'})

这是我的问题:如果我匹配它们的缩进级别,生成的HTML会显示输入字段正在获取所有正确的Cloudinary内容 - 但上传本身不起作用。页面只是刷新,并显示一条错误消息,指出未选择任何图像。重要的是,我可以从生成的HTML中看到我指定的标签正在通过。

如果我使用方法#1,我的缩进,文件上传到Cloudinary,但我的标签都没有应用。它还将所有内容视为图像,在尝试上传除图像之外的任何内容(例如我之前提到的电子书文件)时,会给我一个“无效的图像文件”错误。

我想要两个 - 如何让这个上传字段工作并让它尊重我想要定义的选项?

(我确实在相应的视图中调用了cloudinary.config;我在相应的模板中有cloudinary_includes和cloudinary_js_config;我已经导入了所有内容,并在视图中的表单上调用了cl_init_js_callbacks。)

还有一个补充 - 我使用manage.py的runserver在本地计算机上运行它而不是部署,如果这对配置有任何影响的话。

更新: 我发现了一些我做错的事。我修好了它,让事情变得更糟。

没有加载必要的jQuery。现在我加载它,但上传按钮根本不起作用。我按下按钮,选择文件,选择对话框消失,并显示没有选择文件。但是,我可以看到标签正在传递给生成的HTML,因此它是朝着正确方向迈出的一步。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

请原谅我。这是一个PEBCAK问题;对于可能犯下我未来犯过的同样错误的其他人,我会把这个看得见。

  1. 确保正在加载正确的jQuery脚本 - 打开Chrome开发者控制台,Firebug,然后再仔细检查。然后,确保它们在DOM之后被加载,以便脚本附加元素。

  2. Cloudinary将在您的静态目录中访问html/cloudinary_cors.html

  3. 要么我已经破坏了某些东西,要么这种特殊类型的ModelField的默认行为是简单地立即上传所选文件并继续显示“No File Chosen”。我认为没有发生任何事情,当我看到50多张图片成功上传时,我感到非常惊讶。