【发布时间】:2014-09-15 07:53:43
【问题描述】:
我正在尝试将 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。现在我 am 正在加载它,但上传按钮根本不起作用。我按下按钮,选择文件,选择对话框消失,显示没有选择文件。但是,我可以看到标签被传递给生成的 HTML,所以这是朝着正确方向迈出的一步。有什么想法吗?
【问题讨论】:
-
请注意,第一种方法实际上与不声明字段相同 - Django 将自动生成它在 表单本身中不存在的字段。
Meta类中的字段被完全忽略。您声明的字段与中断上传的自动生成字段之间存在差异。 -
cover_photo字段在模型上声明为CloudinaryField('cover_photo')- 我也尝试将其作为普通的CloudinaryField并得到相同的结果。
标签: django cloudinary