ckeditor_uploader动态图像上传路径

时间:2018-08-31 22:07:47

标签: python django ckeditor django-ckeditor

我有一个Django应用程序,要求用户为每个文档上传多个图像。该应用程序已安装django-ckeditor,但上传的图像最终位于CKEDITOR_UPLOAD_PATH设置所设置的同一文件夹中。我希望基于URL方案的路径是动态的。

例如,在https://myapp/report/1/finding/5上上传到CKEditor实例的图像应位于/ckeditor_base_path/report/1/finding/5/my_img.png中。

不幸的是,在视图创建context参数之前,由窗口小部件(CKEditorUploadingWidget)设置了用于处理设置路径的视图函数的URL。

我希望将参数URL参数发送到ImageUploadView进行处理。对此,我们将提供任何帮助或建议。

2 个答案:

答案 0 :(得分:0)

以防万一,这就是我所做的。用户浏览时,由于它们特定于报告的那部分,因此将仅限于包含查找图像的文件夹。同样,上传图片会将其发送到同一文件夹。

总而言之,您必须:

  1. 将CKEditor上载程序URL指向您的视图版本
  2. 通过相应的表单视图更新CKEditor Uploader小部件
  3. 覆盖CKEditor上传器Colorful.ConsoleImageUploadView视图以创建所需的路径

示例

更新的CKEditor URL路径

browse

小部件更新

path('myapp/<int:org_id>/report/<int:report_id>/finding/<int:finding_id>/image/upload', never_cache(ck_views.upload),
path('myapp/<int:org_id>/report/<int:report_id>/finding/<int:finding_id>/images', never_cache(ck_views.browse), name='ckeditor_browse'),

答案 1 :(得分:0)

我也遇到了同样的问题,看着你的回答,但我认为有一个可能更简单的解决方案。

对于每个要执行的“唯一”上传操作,请在settings.py中创建一个新配置:

CKEDITOR_CONFIGS = {
    'action_a' : {
        'filebrowserUploadUrl': '/path/to/action/a/handling/view/'
    },
    'action_b' : {
        'filebrowserUploadUrl': '/path/to/action/b/handling/view/'
    }
}

创建表单时,将config_name中的CKEditorUploadingWidget设置为所需的操作。

如果您不需要处理任何URL参数(例如我只是想将通过其他编辑器界面上传的文件放在不同目录中),则后续步骤相对简单。在相应的视图中处理并保存上传的文件。

但是,如果您确实需要根据URL参数执行操作,则可以在相应的视图中检查request,以获取从中上传文件的页面:

referrer = request.META.get('HTTP_REFERER')

然后,您可以从所需的URL中提取参数-在您的情况下为报告ID和查找ID-并使用它们将其上传到所需的任何目录。