无法让CKEditor插件在django中工作

时间:2014-11-15 18:57:40

标签: python django plugins ckeditor

我正在尝试使用CKEditor插件,codesnippet,在django管理员中工作,但我无法。如果我没有在settings.py中定义任何CKEDIT_CONFIGS,则CKEditor可以正常工作。如果取出" extraPlugins"它也有效。 line(并成功调整CKEDITOR_CONFIGS部分中定义的高度和宽度)。

我使用以下说明安装了CKEditor:https://github.com/shaunsephton/django-ckeditor

CKeditor位于/ static / ckeditor,codesnippet位于/ static / ckeditor / plugins /

在我的settings.py

CKEDITOR_UPLOAD_PATH = 'uploads/'
CKEDITOR_JQUERY_URL = '/static/js/jquery-2.1.1.min.js'
CKEDITOR_CONFIGS = {
       'default': {
           'toolbar': 'Full',
           'height': 400,
           'width': 900,
           'removePlugins': 'stylesheetparser',
           'extraPlugins': 'codesnippet',
       },
   }

我的admin.py

from django.contrib import admin
from blog.models import Article, Category
from django.utils import text
from django import forms
from ckeditor.widgets import CKEditorWidget

class ArticleAdminForm(forms.ModelForm):
    body = forms.CharField(widget=CKEditorWidget())
    class Meta:
        model = Article

我也尝试过使用'插件'而不是' extraPlugins' (虽然没有推荐),但得到了相同的结果(这就是它打破了CKEditor并且管理员根本没有显示出来)。

提前感谢您的帮助!

编辑11/26/14

好的,所以这仍然没有用。我很确定问题是这个(来自nginx错误日志)

2014/11/26 14:07:20 [error] 3265#0: *1 open() "/srv/www/mysite/static//ckeditor/ckeditor/plugins/codesnippet/plugin.js" failed

这条道路是不对的(错误的双黑色斜线和额外的" ckeditor"目录")。

我的settings.py现在看起来像这样。

CKEDITOR_UPLOAD_PATH = 'uploads/'
CKEDITOR_JQUERY_URL = '/static/js/jquery-2.1.1.min.js'

CKEDITOR_CONFIGS = {
   'default': {
        'toolbar':[ ['CodeSnippet', ], ],
        'height': 400,
        'width': 900,
        'removePlugins': 'stylesheetparser',
        'extraPlugins': 'codesnippet',
   },
}

额外插件行是导致nginx错误的原因,我不知道它在哪里获得该路径。

以下是可能有用的更多信息。

这是我的完整admin.py文件

from django.contrib import admin
from blog.models import Article, Category
from django.utils import text
from django import forms
from django.db import models
from ckeditor.widgets import CKEditorWidget

class ArticleAdminForm(forms.ModelForm):
    body = forms.CharField(widget=CKEditorWidget())

class Meta:
    model = Article

class ArticleAdmin(admin.ModelAdmin):
    form = ArticleAdminForm

admin.site.register(Article, ArticleAdmin)
admin.site.register(Category)

我已将以下行复制到我的ckedit.js文件中,然后将其拖到plugins文件夹中的相应文件夹中。

config.extraPlugins = 'dialog';
config.extraPlugins = 'widget';
config.extraPlugins = 'dialogui';
config.extraPlugins = 'lineutils';
config.extraPlugins = 'clipboard';
config.extraPlugins = 'codesnippet';
config.toolbar_Full.push(['codesnippet']);

编辑12/1/14

Nginx配置文件(根据要求)

server {
    listen 8080;
    server_name mysite.com;
    access_log /srv/www/mysite/logs/access-dev.log;
    error_log /srv/www/mysite/logs/error-dev.log;
    charset utf-8;

    #Django admin css
    location /static/admin {
    alias /srv/www/mysite/static/admin;
    }

    #Django static files
    location /static {
    alias /srv/www/mysite/static/;
    }

    #Django media files
    location /media {
    alias /srv/www/mysite/media/;
    }

    #Uwsgi handles all other requests
    location / {
    auth_basic "Restricted";
    auth_basic_user_file /srv/www/mysite/.nginxpwd;
    uwsgi_pass unix:/var/uwsgi/uwsgi_at-dev.sock;
    include uwsgi_params;
    }
}

EDIT 12/3/14

完整的nginx错误:

2014/11/26 14:36:16 [error] 3461#0: *1 open() "/srv/www/mysite/static//ckeditor/ckeditor/plugins/codesnippet/plugin.js" failed (2: No such file or directory), client: 71.235.164.91, server: 104.131.36.141,, request: "GET /static/ckeditor/ckeditor/plugins/codesnippet/plugin.js?t=E7KD HTTP/1.1", host: "mysite:8080", referrer: "http://mysite:8080/admin/blog/article/3/"

在我的settings.py

MEDIA_ROOT = '/srv/www/mysite/media/'
MEDIA_URL = '/media/'

STATIC_ROOT = '/srv/www/mysite/static'
STATIC_URL = '/static/'

CKEDITOR_UPLOAD_PATH = 'uploads/'
CKEDITOR_JQUERY_URL = '/static/js/jquery-2.1.1.min.js'

5 个答案:

答案 0 :(得分:4)

Code Snippet插件有各种依赖项,每个依赖项都有子依赖项,即:

我必须至少在ckeditor / plugins路径中添加Code Snippet,Widget和Line Utils才能使其工作,并使用以下设置让按钮显示在工具栏中。

CKEDITOR_CONFIGS = {
   'default': {
        'toolbar':[ ['CodeSnippet', ], ],
        'height': 400,
        'width': 900,
        'removePlugins': 'stylesheetparser',
        'extraPlugins': 'codesnippet',
   },
}

因此,一旦安装了所有插件依赖项,它就应该可以工作。

答案 1 :(得分:1)

我几天来一直在和同样的问题作斗争,我想我找到了解决这个问题的方法。

正如您已经注意到的那样,它试图读取这个“static / ckeditor / ckeditor / plugins / codesnippet / plugin.js”javascript,但它无法找到它,即使您已将插件放在“YOUR_PROJECT_DIR”文件夹中/静态/ CKEditor的/ CKEditor的/插件”。原因是,django-ckeditor不搜索项目目录中的静态目录,它在site-packages中自己的路径中搜索自己的静态目录。因此,您可以执行以下操作作为解决方法。

  1. 使用其构建器使用您的插件(像CodeSnippet这样的额外插件)构建CKEditor,将CodeSnippet插件及其依赖项替换为从CKEditor网站单独下载的独立版本。 (插件在其文件夹中没有plugin.js文件)
  2. 下载并解压缩,你将有一个名为'ckeditor'的文件夹,其中包含'lang','plugins'作为子文件夹
  3. 替换python的site-package文件夹中'ckeditor'文件夹中'static / ckeditor / ckeditor'中的整个'ckeditor'目录。例如,你的django-ckeditor安装在“C:\ Python27 \ Lib \ site-packages”中,你会看到'ckedior',用你内置的ckeditor文件夹替换'static / ckeditor / ckeditor'文件夹。或者您将拥有virtualenv或其他任何东西,您可以在自己的网站包中进行。
  4. 在问题描述中添加'extraPlugins'设置,然后运行python manage.py runserver,您将在管理员中看到'CodeSnippet'插件。
  5. P.S:

    1. 对于3.,您也可以将整个“site-packages / ckeditor”文件夹复制到PROJECT_DIR中,然后进行替换。
    2. 在我的实验中,即使删除整个目录,添加或删除插件或对“YOUR_PROJECT_DIR / static / ckeditor”中的配置文件进行更改也不会显示任何效果。
    3. 因此我猜还有一些我们没有做的设置,比如STATIC_URL,STATIC_ROOT等等。我还没弄清楚为什么我也是初学者而且我没有看到你的设置有什么问题。如果找到最终的“解决方案”,我会试着找出根本原因并修改这个答案。也许包裹作者'shaunsephton'可以很容易地找到它并提供一些帮助。 :d

答案 2 :(得分:0)

我多次尝试手动安装插件和依赖项。

最后,我用CKEditor Builder打包了我想要的所有插件 并将其放入我的STATICFILES_DIRS中的ckeditor目录中。 / static / ckeditor / ckeditor / plugins& .js等

我在https://github.com/django-blog-zinnia/zinnia-wysiwyg-ckeditor内使用CKEditor,所以我的设置看起来像.....

CKEDITOR_UPLOAD_PATH = 'uploads'
CKEDITOR_IMAGE_BACKEND = 'pillow'

CKEDITOR_CONFIGS = {

        'zinnia-content': {

            'toolbar': 'Zinnia',
            "extraPlugins":'codesnippet',
            "codeSnippet_theme": "monokai_sublime",
            'skin': 'moono-dark',

            'toolbar_Zinnia': [
                ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord'],
                ['Undo', 'Redo'],
                ['Scayt'],
                ['Link', 'Unlink', 'Anchor'],
                ['Image', 'Table', 'HorizontalRule', 'SpecialChar'],
                ['Source'],
                ['Maximize', 'Resize'],
                '/',
                ['Bold', 'Italic', 'Underline', 'Strike',
                 'Subscript', 'Superscript', '-', 'RemoveFormat'],
                ['NumberedList', 'BulletedList', '-',
                 'Outdent', 'Indent', '-', 'Blockquote'],
                ['Styles', 'Format'],['CodeSnippet'],
                '/',
                ['Smiley', 'About', 'Preview', 'Templates' ],
            ],
        },
    }

所以希望没有百日草,你的设置看起来像....

    CKEDITOR_CONFIGS = {
        'default': {
            'toolbar': 'Full',
            "extraPlugins":'codesnippet',
            "codeSnippet_theme": "monokai_sublime",
            'skin': 'moono-dark',                 
        },
    }

答案 3 :(得分:0)

这可能是问题的原因不同于原始问题,因为它是在几年前。但是很多插件都没有使用最新版本的django-ckeditor,版本5.1.0。

花了我很多时间来解决问题 - 而且最新版本不包括所有插件。如果您点击卸载和安装版本5.0.0,您将获得完整的插件套件。

这可能会帮助找到这个帖子的人。

答案 4 :(得分:0)

实际原因是CKEditor构建器未添加plugin.js。我不知道为什么会这样,但每个插件的 存储库都有一个plugin.js。