ckeditor_uploader动态图片上传路径
ckeditor_uploader Dynamic Image Upload Path
我有一个 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
参数之前,处理设置路径的视图函数的 URL 由小部件 (CKEditorUploadingWidget) 设置。
本来希望把参数URL的参数发给ImageUploadView处理的。非常感谢任何对此的帮助或建议。
如果它对其他人有帮助,这就是我所做的。当用户浏览时,他们将被限制在包含结果图像的文件夹中,因为它们特定于报告的那部分。同样,上传图片会将其发送到同一文件夹。
简而言之,您必须:
- 将 CKEditor 上传器 URL 指向您的视图版本
- 通过相应的表单视图更新 CKEditor 上传器小部件
- 覆盖 CKEditor 上传器
ImageUploadView
和 browse
视图以创建您想要的路径
例子
更新的 CKEditor URL 路径
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'),
小部件更新
def get(self, request, *args, **kwargs):
context = {}
obj = self.get_object()
if obj is not None:
context['org'] = obj.report.org.id
form = FindingForm(instance=obj)
# Set image browse/upload path
image_kwargs = {
'finding_id': obj.id,
'org_id': obj.report.org.id,
'report_id': obj.report.id,
}
image_browse_path = reverse('ckeditor_browse', kwargs=image_kwargs)
image_upload_path = reverse('ckeditor_upload', kwargs=image_kwargs)
form.fields['description'].widget.config['filebrowserBrowseUrl'] = image_browse_path
form.fields['description'].widget.config['filebrowserUploadUrl'] = image_upload_path
context['form'] = form
return render(request, self.template_name, context)
我遇到了同样的问题并查看了您的回答,但我认为有一个可能更简单的解决方案。
对于要执行的每个 'unique' 上传操作,在 settings.py
中创建一个新配置:
CKEDITOR_CONFIGS = {
'action_a' : {
'filebrowserUploadUrl': '/path/to/action/a/handling/view/'
},
'action_b' : {
'filebrowserUploadUrl': '/path/to/action/b/handling/view/'
}
}
创建表单时,将 CKEditorUploadingWidget
的 config_name
设置为所需的操作。
如果您不需要处理任何 URL 参数 - 就像我的情况一样,我只是想将通过不同编辑器界面上传的文件放在不同目录中 - 那么接下来的步骤相对简单.在你对应的视图中处理并保存上传的文件。
如果您确实需要根据 URL 参数执行操作,但是,您可以检查相应视图中的 request
以获取上传文件的页面:
referrer = request.META.get('HTTP_REFERER')
然后您可以从 URL 中提取您需要的参数 - 在您的例子中是报告 ID 和查找 ID - 并使用它们上传到您想要的任何目录。
我有一个 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
参数之前,处理设置路径的视图函数的 URL 由小部件 (CKEditorUploadingWidget) 设置。
本来希望把参数URL的参数发给ImageUploadView处理的。非常感谢任何对此的帮助或建议。
如果它对其他人有帮助,这就是我所做的。当用户浏览时,他们将被限制在包含结果图像的文件夹中,因为它们特定于报告的那部分。同样,上传图片会将其发送到同一文件夹。
简而言之,您必须:
- 将 CKEditor 上传器 URL 指向您的视图版本
- 通过相应的表单视图更新 CKEditor 上传器小部件
- 覆盖 CKEditor 上传器
ImageUploadView
和browse
视图以创建您想要的路径
例子
更新的 CKEditor URL 路径
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'),
小部件更新
def get(self, request, *args, **kwargs):
context = {}
obj = self.get_object()
if obj is not None:
context['org'] = obj.report.org.id
form = FindingForm(instance=obj)
# Set image browse/upload path
image_kwargs = {
'finding_id': obj.id,
'org_id': obj.report.org.id,
'report_id': obj.report.id,
}
image_browse_path = reverse('ckeditor_browse', kwargs=image_kwargs)
image_upload_path = reverse('ckeditor_upload', kwargs=image_kwargs)
form.fields['description'].widget.config['filebrowserBrowseUrl'] = image_browse_path
form.fields['description'].widget.config['filebrowserUploadUrl'] = image_upload_path
context['form'] = form
return render(request, self.template_name, context)
我遇到了同样的问题并查看了您的回答,但我认为有一个可能更简单的解决方案。
对于要执行的每个 'unique' 上传操作,在 settings.py
中创建一个新配置:
CKEDITOR_CONFIGS = {
'action_a' : {
'filebrowserUploadUrl': '/path/to/action/a/handling/view/'
},
'action_b' : {
'filebrowserUploadUrl': '/path/to/action/b/handling/view/'
}
}
创建表单时,将 CKEditorUploadingWidget
的 config_name
设置为所需的操作。
如果您不需要处理任何 URL 参数 - 就像我的情况一样,我只是想将通过不同编辑器界面上传的文件放在不同目录中 - 那么接下来的步骤相对简单.在你对应的视图中处理并保存上传的文件。
如果您确实需要根据 URL 参数执行操作,但是,您可以检查相应视图中的 request
以获取上传文件的页面:
referrer = request.META.get('HTTP_REFERER')
然后您可以从 URL 中提取您需要的参数 - 在您的例子中是报告 ID 和查找 ID - 并使用它们上传到您想要的任何目录。