为了账号安全,请及时绑定邮箱和手机立即绑定

从 ckeditor_uploader.fields 导入 RichTextUploading

从 ckeditor_uploader.fields 导入 RichTextUploading

隔江千里 2021-08-17 18:49:24
从 pip 安装 CKEditor 后,我尝试从模型导入 CKEditor,但它一直给我ImportError cannot import name get_default_renderer.在我彻底遵循 CKEditor 文档之后,它仍然给我错误。是我的 Django 1.10 版问题还是彻底的 5.6.1 版问题?有人可以给我方向吗?模型.pyfrom django.db import modelsfrom django.conf import settingsfrom django.utils import timezonefrom 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)视图.pyfrom django.shortcuts import render, get_object_or_404,  redirectfrom django.utils import timezonefrom .models import Postfrom .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 }, )设置.pyINSTALLED_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,#        }#    }
查看完整描述

2 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

设置CKEditor和设施上传图片


pip install django-ckeditor


在文件 setting.py 中添加 ckeditor 和 ckeditor_uploader


INSTALLED_APPS = [ ... 'ckeditor', 'ckeditor_uploader', ... ]


在文件 setting.py 中添加下面的代码


CKEDITOR_CONFIGS = { 'portal_config': { # 'skin': 'moono', # 'skin': 'office2013', 'toolbar_Basic': [ ['Source', '-', 'Bold', 'Italic'] ], 'toolbar_YourCustomToolbarConfig': [ {'name': 'document', 'items': [ 'Source', '-', 'Save', 'NewPage', 'Preview', 'Print', '-', 'Templates' ]}, {'name': 'clipboard', 'items': [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo']} , {'name': 'editing', 'items': ['Find', 'Replace', '-', 'SelectAll']}, {'name': 'forms', 'items': [ 'Form' , 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField' ]}, '/', {'name': 'basicstyles', 'items': [ '粗体', '斜体', '下划线', '罢工', '下标', '上标', '-', 'RemoveFormat' ]}, {'name': 'paragraph', 'items': [ ' NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock' , '-', 'BidiLtr', 'BidiRtl', 'Language' ]}, {'name': 'links', 'items': ['Link', 'Unlink', 'Anchor']}, {'name': 'insert', 'items': [ 'Image', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe' ]}, '/', {'name': 'styles', 'items': ['Styles', 'Format', 'Font', 'FontSize']}, {'name': 'colors', 'items ': ['TextColor', 'BGColor']}, {'name': 'tools', 'items': ['Maximize', 'ShowBlocks']}, {'name': 'about', 'items': ['About']}, '/', # 把这个强制放在新行的下一个工具栏 {'name': 'yourcustomtools', 'items': [ # 把你的 editor.ui.addButton 的名字放在这里 'Preview' , '最大化',锚点']}, {'name': 'insert', 'items': [ 'Image', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe' ]}, ' /', {'name': 'styles', 'items': ['Styles', 'Format', 'Font', 'FontSize']}, {'name': 'colors', 'items': [' TextColor', 'BGColor']}, {'name': 'tools', 'items': ['Maximize', 'ShowBlocks']}, {'name': 'about', 'items': ['About' ]}, '/', # 把这个强制放在新行的下一个工具栏 {'name': 'yourcustomtools', 'items': [ # 把你的 editor.ui.addButton 的名字放在这里 'Preview', 'Maximize' ,锚点']}, {'name': 'insert', 'items': [ 'Image', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe' ]}, ' /', {'name': 'styles', 'items': ['Styles', 'Format', 'Font', 'FontSize']}, {'name': 'colors', 'items': [' TextColor', 'BGColor']}, {'name': 'tools', 'items': ['Maximize', 'ShowBlocks']}, {'name': 'about', 'items': ['About' ]}, '/', # 把这个强制放在新行的下一个工具栏 {'name': 'yourcustomtools', 'items': [ # 把你的 editor.ui.addButton 的名字放在这里 'Preview', 'Maximize' ,insert', 'items': [ 'Image', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe' ]}, '/', {'name': 'styles' , 'items': ['Styles', 'Format', 'Font', 'FontSize']}, {'name': 'colors', 'items': ['TextColor', 'BGColor']}, {' name': 'tools', 'items': ['Maximize', 'ShowBlocks']}, {'name': 'about', 'items': ['About']}, '/', # 把这个放到在新行上强制下一个工具栏 {'name': 'yourcustomtools', 'items': [ # 把你的 editor.ui.addButton 的名称放在这里 'Preview', 'Maximize',insert', 'items': [ 'Image', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe' ]}, '/', {'name': 'styles' , 'items': ['Styles', 'Format', 'Font', 'FontSize']}, {'name': 'colors', 'items': ['TextColor', 'BGColor']}, {' name': 'tools', 'items': ['Maximize', 'ShowBlocks']}, {'name': 'about', 'items': ['About']}, '/', # 把这个放到在新行上强制下一个工具栏 {'name': 'yourcustomtools', 'items': [ # 把你的 editor.ui.addButton 的名称放在这里 'Preview', 'Maximize',HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe' ]}, '/', {'name': 'styles', 'items': ['Styles', 'Format', 'Font' , 'FontSize']}, {'name': 'colors', 'items': ['TextColor', 'BGColor']}, {'name': 'tools', 'items': ['Maximize', ' ShowBlocks']}, {'name': 'about', 'items': ['About']}, '/', # 把这个强制放在新行的下一个工具栏 {'name': 'yourcustomtools', 'items ': [ # 把你的 editor.ui.addButton 的名字放在这里 'Preview', 'Maximize',HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe' ]}, '/', {'name': 'styles', 'items': ['Styles', 'Format', 'Font' , 'FontSize']}, {'name': 'colors', 'items': ['TextColor', 'BGColor']}, {'name': 'tools', 'items': ['Maximize', ' ShowBlocks']}, {'name': 'about', 'items': ['About']}, '/', # 把这个强制放在新行的下一个工具栏 {'name': 'yourcustomtools', 'items ': [ # 把你的 editor.ui.addButton 的名字放在这里 'Preview', 'Maximize',items': ['Styles', 'Format', 'Font', 'FontSize']}, {'name': 'colors', 'items': ['TextColor', 'BGColor']}, {'name' : 'tools', 'items': ['Maximize', 'ShowBlocks']}, {'name': 'about', 'items': ['About']}, '/', # 强制下一个新行上的工具栏 {'name': 'yourcustomtools', 'items': [ # 把你的 editor.ui.addButton 的名称放在这里 'Preview', 'Maximize',items': ['Styles', 'Format', 'Font', 'FontSize']}, {'name': 'colors', 'items': ['TextColor', 'BGColor']}, {'name' : 'tools', 'items': ['Maximize', 'ShowBlocks']}, {'name': 'about', 'items': ['About']}, '/', # 强制下一个新行上的工具栏 {'name': 'yourcustomtools', 'items': [ # 把你的 editor.ui.addButton 的名称放在这里 'Preview', 'Maximize',about', 'items': ['About']}, '/', # 把这个强制放在新行的下一个工具栏 {'name': 'yourcustomtools', 'items': [ # 输入你的编辑器的名字。 ui.addButton 此处为“预览”、“最大化”、about', 'items': ['About']}, '/', # 把这个强制放在新行的下一个工具栏 {'name': 'yourcustomtools', 'items': [ # 输入你的编辑器的名字。 ui.addButton 此处为“预览”、“最大化”、


     ]},

 ],

 'toolbar': 'YourCustomToolbarConfig',  # put selected toolbar config here

 # 'toolbarGroups': [{ 'name': 'document', 'groups': [ 'mode', 'document', 'doctools' ] }],

 # 'height': 291,

 # 'width': '100%',

 # 'filebrowserWindowHeight': 725,

 # 'filebrowserWindowWidth': 940,

 # 'toolbarCanCollapse': True,

 # 'mathJaxLib': '//cdn.mathjax.org/mathjax/2.2-latest/MathJax.js?config=TeX-AMS_HTML',

 'tabSpaces': 4,

 'extraPlugins': ','.join([

     'uploadimage',  # the upload image feature

     # your extra plugins here

     'div',

     'autolink',

     'autoembed',

     'embedsemantic',

     'autogrow',

     # 'devtools',

     'widget',

     'lineutils',

     'clipboard',

     'dialog',

     'dialogui',

     'elementspath'

 ]),

} }


在模型中


从 ckeditor_uploader.fields 导入 RichTextUploadingField


class Article(models.Model): body = RichTextUploadingField(config_name='portal_config') 

//img1.sycdn.imooc.com//611b947e0001ccc310770733.jpg

查看完整回答
反对 回复 2021-08-17
  • 2 回答
  • 0 关注
  • 391 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信