django-wysiwyg-redactor / django1.8 / python2.7 не может загрузить изображение

Я использую Django-Wysiwyg-Redactor с django 1.8 а также python 2.7.9, Вот мой код:

settings.py:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'redactor',
)

import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media'),
MEDIA_URL = '/media/'

# WYSIWYG redactor configuration
REDACTOR_OPTIONS = {'lang': 'fr', 'plugins': ['table', 'fontcolor', 'fontsize', 'filemanager', 'imagemanager']}
REDACTOR_UPLOAD = MEDIA_ROOT
REDACTOR_UPLOAD_HANDLER = 'my_app.apps.core.storage.UploadDateDirectoryUploader'
REDACTOR_FILE_STORAGE = 'my_app.apps.core.storage.redactor_storage'

Все плагины.js находятся в статических файлах.

my_app.apps.core.storage.py:

from django.core.files.storage import FileSystemStorage
from django.conf import settings

import redactor.handlers
import datetime

redactor_storage = FileSystemStorage(location=settings.MEDI_ROOT, base_url=settings.MEDIA_URL)


class UploadDateDirectoryUploader(redactor.handlers.SimpleUploader):
    """
    Handler  that saves files in a directory based on the current date
    /2014/3/28/filename.etc
    """
    def get_upload_path(self):
        today = datetime.datetime.today()
        path = '{0}/{1}/{2}'.format(today.year, today.month, today.day)
        return path

forms.py

from django import forms
from django.conf import settings
from django.utils.translation import ugettext as _

from redactor.widgets import RedactorEditor

import datetime

LANGUAGES = settings.LANGUAGES

class NewsForm(forms.Form):
    title = forms.CharField(label=_('The news title'), max_length=100)
    message = forms.CharField(label=_('Enter your message'), widget=RedactorEditor())
    start_date = forms.DateTimeField(label=_('The news will be published the'), initial=datetime.datetime.now())
    end_date = forms.DateTimeField(label=_('The news will be removed the'), required=False)
    active = forms.BooleanField(initial=False, widget=forms.HiddenInput())
    language = forms.ChoiceField(choices=LANGUAGES, initial='fr', widget=forms.HiddenInput())

В моем шаблоне у меня нет кода, связанного с редактором, я генерирую форму с django-crispy-forms. Визуально, поле редактора отображается правильно, на панели инструментов у меня есть все доступные кнопки плагинов. Когда Redactor инициализируется, это представление редактора называется:

.virtualenvs / my_app / lib / python2.7 / site-packages / redactor / views.py:

import json
from django.conf import settings
from django.utils.translation import ugettext as _
from django.http import HttpResponse
from django.views.generic import FormView
from django.contrib.admin.views.decorators import staff_member_required
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from django.utils.encoding import force_str

from redactor.forms import ImageForm
from redactor.utils import import_class, is_module_image_installed


class RedactorUploadView(FormView):
    form_class = ImageForm
    http_method_names = ('post',)
    upload_to = getattr(settings, 'REDACTOR_UPLOAD', 'redactor/')
    upload_handler = getattr(settings, 'REDACTOR_UPLOAD_HANDLER',
                             'redactor.handlers.SimpleUploader')

    print "RedactorUploadView : upload_to {0} | upload_handler {1}".format(upload_to, upload_handler)

    @method_decorator(csrf_exempt)
    @method_decorator(staff_member_required)
    def dispatch(self, request, *args, **kwargs):
        print "RedactorUploadView dispatch : kwargs : {0}".format(self.kwargs)
        if not is_module_image_installed():
            data = {
                'error': _("ImproperlyConfigured: Neither Pillow nor PIL could be imported: No module named 'Image'"),
            }
            return HttpResponse(json.dumps(data),
                                content_type='application/json')

        return super(RedactorUploadView, self).dispatch(request, *args,
                                                        **kwargs)

    def form_invalid(self, form):
        print "RedactorUploadView form_invalid : kwargs : {0}".format(self.kwargs)
        # TODO: Needs better error messages
        try:
            error = form.errors.values()[-1][-1]
        except:
            error = _('Invalid file.')
        data = {
            'error': error,
        }
        return HttpResponse(json.dumps(data), content_type='application/json')

    def form_valid(self, form):
        print "RedactorUploadView form_valid : kwargs : {0}".format(self.kwargs)
        file_ = form.cleaned_data['file']
        handler_class = import_class(self.upload_handler)
        uploader = handler_class(file_, upload_to=self.kwargs.get('upload_to', None))
        uploader.save_file()
        file_name = force_str(uploader.get_filename())
        file_url = force_str(uploader.get_url())
        data = {
            'filelink': file_url,
            'filename': file_name,
        }
        return HttpResponse(json.dumps(data), content_type='application/json')

upload_to а также upload_handler правильно инициализируются с upload_to путь к моей папке с мультимедиа и upload_handler мой storage.py UploadDateDirectoryUploader учебный класс.

Но затем, когда я добавляю изображение в wysiwyg, вызывается метод класса диспетчеризации redactor view.py с upload_to = ''!

Я часами искал решение, но не могу понять, почему вдруг начальное значение upload_to не мое /media/ папка больше?

В моем шаблоне появляется предупреждение с True внутри (большое сообщение об ошибке) я думаю, что это происходит из функции обратного вызова для загрузки изображений по умолчанию:

redactor / jquery.redactor.init.js:

if(typeof django !== "undefined") {
    jQuery = django.jQuery.noConflict(true);
}

var image_upload_error_callback = function (json) {
    // TODO: Needs better error messages
    alert(json.error);
}

redactor_default_options = {
    imageUploadErrorCallback: image_upload_error_callback
};

0 ответов

Другие вопросы по тегам