No puedo conseguir que los complementos de CKEditor funcionen en django

Estoy intentando que el complemento CKEditor, codesnippet, funcione en el administrador de django pero no puedo. CKEditor funciona si no defino ningún CKEDIT_CONFIGS en mi configuración.py. También funciona si elimina la línea “extraPlugins” (y ajustará con éxito la altura y el ancho como se define en la sección CKEDITOR_CONFIGS).

Instalé CKEditor siguiendo las instrucciones aquí: https://github.com/shaunsephton/django-ckeditor

CKeditor se encuentra en / static / ckeditor y codesnippet está en / static / ckeditor / plugins /

En mi 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', }, } 

Mi 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 

    También he intentado usar solo ‘plugins’ en lugar de ‘extraPlugins’ (aunque no se recomienda), pero obtuve el mismo resultado (que rompe CKEditor y el archivo no se muestra en absoluto en el administrador).

    ¡Gracias de antemano por tu ayuda!

    EDITAR 26/11/14

    OK, así que esto todavía no funciona. Estoy bastante seguro de que el problema es este (del registro de errores nginx)

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

    Esa ruta no es correcta (doble barra diagonal errónea y un directorio “ckeditor” adicional).

    Mi settings.py ahora se ve así.

     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', }, } 

    La línea de complementos adicionales es lo que está causando el error nginx, no tengo idea de dónde está obteniendo esa ruta.

    A continuación hay más información que puede ser útil.

    Este es mi archivo admin.py completo

     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) 

    He copiado las siguientes líneas en mi archivo ckedit.js y las arrastré sobre las carpetas apropiadas en la carpeta de complementos.

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

    EDITAR 12/1/14

    Archivo de configuración de Nginx (según lo solicitado)

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

    EDITAR 12/3/14

    Error completo de 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/" 

    En mi 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' 

    El complemento Code Snippet tiene varias dependencias, cada una de las cuales tiene subdependencias, es decir:

    • Widget (tiene las Utilidades de línea como una sub-dependencia entre otras)
    • Diálogo (también tiene sub dependencias)

    Tenía que agregar, como mínimo, Fragmento de código, Widget y Utilidades de línea en la ruta de ckeditor / plugins para que funcionara, así como usar la siguiente configuración para que el botón aparezca en la barra de herramientas.

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

    Así que una vez que todas las dependencias de tu plugin estén instaladas, debería funcionar.

    He estado luchando contra el mismo problema durante días y creo que encontré una solución para este problema.

    Como también se ha dado cuenta, intenta leer este javascript “static / ckeditor / ckeditor / plugins / codesnippet / plugin.js” pero no puede ubicarlo, incluso si ha puesto el plugin en la carpeta “YOUR_PROJECT_DIR / static / ckeditor / ckeditor / plugins “. La razón es que django-ckeditor no está buscando el directorio estático en el directorio de su proyecto, está buscando su propio directorio estático en su propia ruta en los paquetes de sitio. Como resultado, puede hacer lo siguiente como solución alternativa.

    1. Cree CKEditor con sus complementos (complementos adicionales como CodeSnippet) usando su Builder, reemplace el complemento CodeSnippet y sus dependencias con las versiones independientes descargadas por separado del sitio web de CKEditor. (Los complementos no tienen el archivo plugin.js en su carpeta)
    2. Descárgalo y descomprímelo, tendrás una carpeta llamada ‘ckeditor’ con ‘lang’, ‘plugins’ como subcarpetas
    3. Reemplace todo el directorio ‘ckeditor’ en ‘static / ckeditor / ckeditor’ en la carpeta de ‘ckeditor’ en la carpeta de paquete de sitio de su python. Por ejemplo, su django-ckeditor está instalado en “C: \ Python27 \ Lib \ site-packages”, verá ‘ckedior’, reemplace la carpeta ‘static / ckeditor / ckeditor’ con su carpeta de ckeditor construida. O tendrá virtualenv o lo que sea, puede hacerlo en sus propios paquetes de sitio.
    4. Agregue la configuración de ‘extraPlugins’ como ya hizo en la descripción del problema, ejecute python manage.py runserver y verá el complemento ‘CodeSnippet’ en su administrador.

    PD:

    1. Para 3., también puede copiar esta carpeta completa “site-packages / ckeditor” a su PROJECT_DIR, y hacer el reemplazo.
    2. Para mi experimentación, agregar o eliminar complementos o realizar cambios en los archivos de configuración en “YOUR_PROJECT_DIR / static / ckeditor” no muestra ningún efecto, incluso si elimina todo el directorio.
    3. Por lo tanto, creo que todavía hay algunas configuraciones que no hicimos correctamente, como STATIC_URL, STATIC_ROOT o algo así. No he entendido por qué ya que también soy un principiante y no vi qué es lo que está mal con tu configuración. Intentaré averiguar la causa raíz y enmendar esta respuesta si se encuentra la “Solución” final. Tal vez el autor del paquete ‘shaunsephton’ podría entenderlo fácilmente y prestar algo de ayuda. :RE

    Luché con esto durante años intentando instalar los complementos y las dependencias manualmente.

    Al final, empaqueté todos los complementos que quería con CKEditor Builder y los coloqué en un directorio de ckeditor en mi STATICFILES_DIRS. / static / ckeditor / ckeditor / plugins & .js etc.

    Estoy usando CKEditor en https://github.com/django-blog-zinnia/zinnia-wysiwyg-ckeditor para que mi configuración se vea como …

     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' ], ], }, } 

    Así que con suerte, sin Zinnia, tu configuración se vería como …

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

    Esta es probablemente una causa diferente del problema de lo que se preguntó originalmente, porque fue hace unos años. Pero muchos complementos no funcionan con la última versión de django-ckeditor, versión 5.1.0.

    Me tomó mucho tiempo resolver lo que estaba mal, y es solo que la última versión no incluye todos los complementos. Si pip desinstala y instala la versión 5.0.0, obtiene el conjunto completo de complementos.

    Imagínate que esto podría ayudar a alguien que encuentre este hilo.

    La causa real es que el constructor CKEditor no agrega plugin.js. No tengo idea de por qué, pero el repository de cada complemento tiene un plugin.js.