ckeditor_uploader Динамический путь загрузки изображений - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть приложение Django, которое требует, чтобы пользователи загружали несколько изображений для одного документа. В приложении установлен django-ckeditor, но загруженные изображения оказываются в той же папке, которая установлена ​​параметром CKEDITOR_UPLOAD_PATH. Я хотел бы, чтобы путь был динамическим, основанным на схеме URL.

Например, изображения, загруженные в экземпляр CKEditor на https://myapp/report/1/finding/5, должны находиться в /ckeditor_base_path/report/1/finding/5/my_img.png.

К сожалению, URL для функции представления, которая обрабатывает установку пути, устанавливается виджетом ( CKEditorUploadingWidget ) до того, как представление создает параметр context.

Я надеялся отправить URL-параметры параметров на ImageUploadView для обработки. Любая помощь или совет по этому вопросу очень ценится.

1 Ответ

0 голосов
/ 02 сентября 2018

В случае, если это поможет кому-то еще, вот что я сделал. Когда пользователи просматривают, они будут ограничены папкой с изображениями, поскольку они относятся к этой части отчета. Аналогичным образом, загрузка изображения отправит его в ту же папку.

В двух словах, вы должны:

  1. Укажите URL-адреса CKEditor Uploader для вашей версии представлений
  2. Обновите виджет CKEditor Uploader с помощью соответствующих представлений формы
  3. Переопределите CKEditor Uploader ImageUploadView и browse представлений, чтобы создать желаемый путь

Примеры

Обновлены пути URL CKEditor

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)
...