【问题标题】:Can't get CKEditor plugins to work in django无法让 CKEditor 插件在 django 中工作
【发布时间】:2015-01-12 23:54:48
【问题描述】:

我正在尝试让 CKEditor 插件 coden-p 在 django 管理员中工作,但无法。如果我没有在我的 settings.py 中定义任何 CKEDIT_CONFIGS,CKEditor 就可以工作。如果取出“extraPlugins”行(它会成功调整 CKEDITOR_CONFIGS 部分中定义的高度和宽度),它也可以工作。

我使用此处的说明安装了 CKEditor:https://github.com/shaunsephton/django-ckeditor

CKeditor 位于 /static/ckeditor,coden-p 位于 /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',
       },
   }

我的管理员.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

我也尝试过只使用“plugins”而不是“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',
   },
}

Extra Plugins 行是导致 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 文件中,并将其拖到插件文件夹中的相应文件夹上。

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;
    }
}

编辑 2014 年 12 月 3 日

完整的 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'

【问题讨论】:

  • 这是 Nginx 或 Django STATIC 设置问题,能否提供您的 Nginx 配置和 STATIC 设置详细信息?否则,我建议您尝试使用 Django 开发服务器进行调试,以消除 Nginx 的影响。
  • 我已将我的 nginx 配置文件添加到原始问题中。
  • 能否请您也发布您的 STATIC_URL 和 STATIC_ROOT 设置?失败路径的 ckeditor/ckeditor/plugins 部分是正确的,所以我假设双斜杠会使事情变得混乱。所以要么你需要调整你的 Nginx conf,要么你需要调整你的 STATIC_* 设置。您的日志条目是否还有 HTTP 错误代码?从条目中不清楚失败是什么,甚至可能与权限有关。
  • 已发布。我不认为这是一个权限问题。错误是“没有这样的文件或目录”。即使没有双斜杠,路径仍然是错误的......应该只有一个 ckeditor 目录。正确的路径是 /srv/www/mysite/static/ckeditor/plugins/codesn-p/plugin.js 而不是 /srv/www/mysite/static/ckeditor/ckeditor/plugins/codesn-p/plugin.js

标签: python django plugins ckeditor


【解决方案1】:

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

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

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

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

【讨论】:

  • Shaun 谢谢,我尝试安装依赖项,但还是不行。看起来它在途中某处选择了错误的 java 脚本文件路径(请参阅我对上面原始问题所做的编辑)。
【解决方案2】:

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

正如您也注意到的,它尝试读取此“static/ckeditor/ckeditor/plugins/codesn-p/plugin.js” javascript,但它无法找到它,即使您已将插件放在文件夹中“YOUR_PROJECT_DIR/static/ckeditor/ckeditor/plugins”。原因是,django-ckeditor 不是在您的项目目录中搜索静态目录,而是在站点包中自己的路径中搜索自己的静态目录。因此,您可以执行以下解决方法。

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

附:

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

【讨论】:

  • 网络服务器提供的静态目录中的文件只包含副本(或符号链接)。可以通过在 myapp/static/ckeditor/ckeditor/foo/plugin.js 中创建文件来将文件插入到 ckeditor-static 目录中。然后运行collectstatic。 URL 看起来像是一个目录,但来源来自多个目录。结果:你不需要替换你的 python 站点包目录中的 ckeditor 目录。
【解决方案3】:

我为此奋斗了很久,试图手动安装插件和依赖项。

最后,我把我想要的所有插件都打包成了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' ],
            ],
        },
    }

因此,希望没有 Zinnia,您的设置看起来像......

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

【讨论】:

    【解决方案4】:

    这可能与最初询问的问题不同,因为这是几年前的问题。但是很多插件不适用于 django-ckeditor 的最新版本 5.1.0。

    我花了很长时间才弄清楚出了什么问题 - 只是最新版本不包含所有插件。如果您 p​​ip 卸载并安装 5.0.0 版,您将获得完整的插件套件。

    认为这可能会对找到此主题的人有所帮助。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2017-07-04
        • 1970-01-01
        • 2019-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-15
        相关资源
        最近更新 更多