我正在尝试将Django CMS项目部署到Heroku。媒体将通过Django Storages和Boto从S3提供。目前唯一的媒体包括Django CMS Picture插件(使用标准ImageField)和Aldryn Blog帖子(使用FilerImageField和easy_thumbnails)。
通过Django Filer将图像添加到博客帖子效果很好,但在创建Django CMS Picture插件时添加图像失败,出现500错误:
POST / en / admin / cms / page / edit-plugin / 3 / HTTP / 1.1
主持人:192.168.1.104:8000 连接:保持活力
内容长度:72567
缓存控制:max-age = 0
接受:text / html,application / xhtml + xml,application / xml; q = 0.9,image / webp, / ; q = 0.8
来源:http://192.168.1.104:8000
User-Agent:Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 35.0.1916.153 Safari / 537.36
内容类型:multipart / form-data;边界= ---- WebKitFormBoundaryegTMPxZL74Wiukrg
推荐人:http://192.168.1.104:8000/en/admin/cms/page/edit-plugin/3/
Accept-Encoding:gzip,deflate,sdch
接受语言:en-US,en; q = 0.8
Cookie:django_language = en;的sessionid = wj7ayeia7rwggpxecatspe7lw5i12345; csrftoken = Pf342snoku6cdoRD6b9FCtxfqVQ12345HTTP / 1.0 500内部服务器错误
日期:太阳,2014年7月13日07:06:46 GMT
服务器:WSGIServer / 0.1 Python / 2.7.3
内容 - 语言:en
到期日:Sun,2014年7月13日07:06:46 GMT
变化:饼干
Last-Modified:Sun,2014年7月13日07:06:46 GMT
缓存控制:max-age = 0
X-Frame-Options:SAMEORIGIN
内容类型:text / html
图像已成功上传到S3,插件在CMS中创建,但显示为<Empty>
。以下是我认为的相关设置:
'''
We use S3 as our media backend on Heroku, so set that up
'''
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = 'me'
AWS_SECRET_ACCESS_KEY = 'hunter2'
AWS_STORAGE_BUCKET_NAME = 'bucket'
'''
Adjust media URL to point directly to S3
'''
MEDIA_URL = 'http://bucket.s3.amazonaws.com/'
'''
Adjust thumbnail storage
'''
THUMBNAIL_DEFAULT_STORAGE = DEFAULT_FILE_STORAGE
此外,我可以以编程方式创建一个Picture插件,它工作正常:
df = File(f)
p = Picture(language=u'en', plugin_type=u'PicturePlugin', level=0, lft=1, rght=2, tree_id=3, placeholder=ph)
p.image.save(name='test.png', content=df)
p.save()
任何关于我做错事的想法都会受到高度赞赏,我被卡住了。
编辑1:感谢您的回复,mkoistinen,试图为您提供更多信息,但老实说我对这些内容如何组合感到有些困惑,所以我只是拍了截图。
插件创建表单:
表单处于错误状态一瞬间(我试图点击那个&#34;分享这个追溯......&#34;按钮没有成功):
图像存储到S3并创建了CMSPlugin(但不是图片):
回复为空,也不会出现任何JavaScript错误:
编辑2:此替换插件运行正常,不知道如何:
# djangocms_pic/cms_plugins.py
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from models import Pic
class PicPlugin(CMSPluginBase):
model = Pic
name = 'Pic'
render_template = 'pic_plugin.html'
plugin_pool.register_plugin(PicPlugin)
# djangocms_pic/models.py
from django.db import models
from cms.models import CMSPlugin
class Pic(CMSPlugin):
image = models.ImageField(upload_to = CMSPlugin.get_media_path)
# djangocms_pic/templates/pic_plugin.html
<img src="{{ instance.image.url }}" />