Из ckeditor_uploader.fields импортируйте RichTextUploadingField - PullRequest
0 голосов
/ 14 ноября 2018

После установки CKEditor из pip я пытаюсь импортировать CKEditor из моделей, но он продолжает давать мне ImportError cannot import name get_default_renderer.

После того, как я внимательно следил за документацией CKEditor, она все равно выдает мне ошибку. Это моя проблема с Django версии 1.10 или полностью версия 5.6.1? Кто-нибудь может дать мне направление?

models.py

from django.db import models
from django.conf import settings
from django.utils import timezone
from ckeditor_uploader.fields import RichTextUploadingField

# Create your models here.

class Post(models.Model):
    author = models.ForeignKey('auth.User', on_delete= models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.RichTextUploadingField()
    image = models.ImageField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank= True, null = True)

views.py

from django.shortcuts import render, get_object_or_404,  redirect
from django.utils import timezone
from .models import Post
from .forms import CommentForm
# Create your views here.

def post_list(request):
  posts =   Post.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')
return render(request, 'blog/post_list.html', {'posts':posts })

def post_detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
if request.method == 'POST':
    form = CommentForm(request.POST)
    if form.is_valid():
        comment = form.save(commit=False)
        comment.post = post
        comment.save()
        return redirect('blog:post_detail', pk=post.pk)
else:
    form = CommentForm()
return render(request, 'blog/post_detail.html', {'post':post, 'form':form }, )

settings.py

INSTALLED_APPS = [
  'app',
  'cart',
  'orders',
  'blog',
  'ckeditor_uploader',
  # Add your apps here to enable them
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
]

CKEDITOR_JQUERY_URL = 'https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js'

CKEDITOR_UPLOAD_PATH = 'uploads/'

CKEDITOR_IMAGE_BACKEND = 'pillow'

#CKEDITOR_CONFIGS = {
#    'default':{
#        'toolbar': None,
#        }
#    }

urls.py

from django.conf.urls import url
import django.contrib.auth.views
from django.conf.urls import include
from django.contrib import admin
from django.conf.urls.static import static
from django.conf import settings
# admin.autodiscover()

urlpatterns = [
   url(r'^admin/', admin.site.urls),
   url(r'^cart', include('cart.urls')),
   url(r'^orders', include('orders.urls')),
   url(r'^', include('app.urls')),
   url(r'^blog/', include('blog.urls')),
   url(r'^ckeditor/', include('ckeditor_uploader.urls')),
]

if settings.DEBUG:
   urlpatterns += static(settings.MEDIA_URL,  document_root=settings.MEDIA_ROOT)

страница ошибки

ImportError: cannot import name 'get_default_renderer'
Unhandled exception in thread started by <function check_errors.  <locals>.wrapper at 0x0421B4F8>
 Traceback (most recent call last):
 File "C:\Users\stylop\AppData\Local\Programs\Python\Python36-32\lib\site-    packages\django\utils\autoreload.py", line 226, in wrapper
 fn(*args, **kwargs)
 File "C:\Users\stylop\AppData\Local\Programs\Python\Python36-32\lib\site-   packages\django\core\management\commands\runserver.py", line 113, in inner_run
 autoreload.raise_last_exception()
 File "C:\Users\stylop\AppData\Local\Programs\Python\Python36-32\lib\site- packages\django\utils\autoreload.py", line 249, in raise_last_exception
 six.reraise(*_exception)
 File "C:\Users\stylop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\utils\six.py", line 685, in reraise
 raise value.with_traceback(tb)
 File "C:\Users\stylop\AppData\Local\Programs\Python\Python36-32\lib\site- packages\django\utils\autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "C:\Users\stylop\AppData\Local\Programs\Python\Python36-32\lib\site-  packages\django\__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\stylop\AppData\Local\Programs\Python\Python36-32\lib\site- packages\django\apps\registry.py", line 108, in populate
app_config.import_models(all_models)
File "C:\Users\stylop\AppData\Local\Programs\Python\Python36-32\lib\site- packages\django\apps\config.py", line 199, in import_models
self.models_module = import_module(models_module_name)
File "C:\Users\stylop\AppData\Local\Programs\Python\Python36-32 \lib\importlib\__init__.py", line 126, in import_module
 return _bootstrap._gcd_import(name[level:], package, level)
 File "<frozen importlib._bootstrap>", line 978, in _gcd_import
 File "<frozen importlib._bootstrap>", line 961, in _find_and_load
 File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
 File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
 File "<frozen importlib._bootstrap_external>", line 678, in exec_module
 File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
 File "C:\Users\stylop\source\repos\alfiez\alfiez\blog\models.py", line 4, in <module>
from ckeditor_uploader.fields import RichTextUploadingField
 File "C:\Users\stylop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\ckeditor_uploader\fields.py", line 3, in <module>
 from ckeditor import fields
 File "C:\Users\stylop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\ckeditor\fields.py", line 6, in <module>
 from .widgets import CKEditorWidget
 File "C:\Users\stylop\AppData\Local\Programs\Python\Python36-32\lib\site- packages\ckeditor\widgets.py", line 12, in <module>
 from django.forms.widgets import get_default_renderer
 ImportError: cannot import name 'get_default_renderer'

1 Ответ

0 голосов
/ 15 ноября 2018

Если все, что вам нужно, это иметь простой редактор WYSIWYG. Django-Ckeditor идеально подходит для вас.

pip install django-ckeditor

Добавьте ckeditor к вашему INSTALLED_APPS в settings.py

Запустите команду управления collectstatic: $ ./manage.py collectstatic. Это скопирует статические CKEditor необходимые медиа-ресурсы в каталог, заданный параметром STATIC_ROOT

В вашем models.py импортируйте from ckeditor.fields import RichTextField и используйте его прямо так

class Foo(models.Model):
   content = RichTextField()

Также импортируйте в ваш forms.py from ckeditor.fields import RichTextFormField и использовать его прямо как

class FooForm(forms.ModelForm):
    class Meta:
          model = Foo
          fields = ['content']
          widgets = {
             'content': RichTextFormField(),
          }

У вас должно быть что-то вроде этого ck-editor working with Django-Admin Для дополнительной настройки вы можете добавить это к вашему settings.py и настроить его так, как вам нужно

# CKEditor Configuration Settings

CKEDITOR_CONFIGS = {
    'default': {
        # 'toolbar': 'Custom',
        'width': '461px',
        'height': 'auto',
        # 'toolbar_Custom': [
        #     ['Bold', 'Italic', 'Underline'],
        #     ['NumberedList', 'BulletedList'],
        # ],
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...