2016-11-11 4 views
0

Hallo allerseits ich eine Seite Erweiterung mit den documentation of Django CMS erstellen und perfekt funktionieren,Seite Erweiterung mit tinyMCE django-cms

Jetzt habe ich einen zwei text_area in meiner Erweiterung Seite, ich will TinyMCE Bibliothek meiner text_area schließen

dafür habe ich dies in meinem models.py

from django.db import models 
from cms.extensions import PageExtension 
from cms.extensions.extension_pool import extension_pool 


class IconExtension(PageExtension): 

    image = models.ImageField(upload_to='icons', blank=True) 
    description_short = models.TextField(blank=True, null=True, verbose_name="Short Description") 
    description_large = models.TextField(blank=True, null=True, verbose_name="Large Description") 

extension_pool.register(IconExtension) 

und meine admin.py dieses

# from django.forms import * 
from django.forms import ModelForm 
from django import forms 
from django.db.models import * 
from django.contrib import admin 
from cms.extensions import PageExtensionAdmin 
from tinymce.widgets import TinyMCE 


from .models import IconExtension 

class IconExtensionForm(forms.ModelForm): 
    some_field = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 10})) 

    class Meta: 
    model = IconExtension 
    fields = '__all__' 


class IconExtensionAdmin(PageExtensionAdmin): 
    form = IconExtensionForm 

admin.site.register(IconExtension, IconExtensionAdmin) 
0 haben

jetzt erhalte ich diese Störung

jquery.tinymce.min.js:1 Uncaught TypeError: Cannot read property 'fn' of undefined(anonymous function) @ jquery.tinymce.min.js:1(anonymous function) @ jquery.tinymce.min.js:1 
init_tinymce.js:16 Uncaught ReferenceError: tinyMCE is not defined 

meine setting.py Datei haben diese Konfiguration

TINYMCE_JS_URL = os.path.join(STATIC_URL, "tinymce/jquery.tinymce.min.js") 
TINYMCE_JS_ROOT = '/static/js/tinymce/' 
TINYMCE_DEFAULT_CONFIG = { 
    'plugins': "table,spellchecker,paste,searchreplace", 
    'theme': "advanced", 
} 
TINYMCE_SPELLCHECKER = True 

ich für die Lösung aussehen in Internet und alle sagen, dass ich, bevor Sie die jQuery-Bibliothek laden ... in meinem Fall ist mein Feld mit TinyMCE innerhalb von Popup, die Seite hat das Popup lädt die jquery Bibliothek zum zweiten Mal .. bootstrap ist das erste.

Wenn ich das Element innerhalb des Popup, meine Last Bibliothek inspizieren sind diese

<head> 
<title> 
Change icon extension | Django site admin</title> 
<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css"> 
<link rel="stylesheet" type="text/css" href="/static/admin/css/forms.css"> 
<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="/static/admin/css/ie.css" /><![endif]--> 

<script type="text/javascript">window.__admin_media_prefix__ = "/static/admin/";</script> 
<script type="text/javascript">window.__admin_utc_offset__ = "\u002D18000";</script> 

<meta name="viewport" content="width=device-width,initial-scale=1"> 
<link rel="stylesheet" type="text/css" href="/static/djangocms_admin_style/css/djangocms-admin.css"> 

    <script src="/static/djangocms_admin_style/js/dist/bundle.adminstyle.min.js"></script> 


    <script type="text/javascript" src="/en/admin/jsi18n/"></script> 
    <script type="text/javascript" src="/static/admin/js/core.js"></script> 
    <script type="text/javascript" src="/static/admin/js/jquery.js"></script> 
    <script type="text/javascript" src="/static/admin/js/jquery.init.js"></script> 
    <script type="text/javascript" src="/static/admin/js/admin/RelatedObjectLookups.js"></script> 
    <script type="text/javascript" src="/static/admin/js/actions.js"></script> 
    <script type="text/javascript" src="/static/tinymce/jquery.tinymce.min.js"></script> 
    <script type="text/javascript" src="/static/django_tinymce/jquery-1.9.1.min.js"></script> 
    <script type="text/javascript" src="/static/django_tinymce/init_tinymce.js"></script> 

    <meta name="robots" content="NONE,NOARCHIVE"> 
    </head> 

eine Idee, wie tinyMCE enthalten in Seitenerweiterung, bin ich in der richtigen Art und Weise?

+0

Ich habe mit komplexeren Antwort antwortete aber nur einen kleinen Tippfehler in Ihrem Code hinweisen - Sie importieren aus django.forms * aber nicht die Formen selbst wird somit forms.ModelForm nicht gefunden. Die Verwendung von nur ModelForm würde ausreichen. – petr

Antwort

1

Sofern keine spezielle Anforderung für die Verwendung von TinyMCE besteht, würde ich eine Integration empfehlen, die bereits in das Django CMS Text-Modul integriert ist (CKEditor).

# models.py 

class Model1(models.Model): 
    text = HTMLField(configuration='CKEDITOR_SETTINGS_MODEL1') 

class Model2(models.Model): 
    text = HTMLField(configuration='CKEDITOR_SETTINGS_MODEL2') 

# settings.py 

CKEDITOR_SETTINGS_MODEL1 = { 
    'toolbar_HTMLField': [ 
     ['Undo', 'Redo'], 
     ['ShowBlocks'], 
     ['Format', 'Styles'], 
     ['Bold', 'Italic', 'Underline', '-', 'Subscript', 'Superscript', '-', 'RemoveFormat'], 
    ] 
} 

CKEDITOR_SETTINGS_MODEL2 = { 
    'toolbar_HTMLField': [ 
     ['Undo', 'Redo'], 
     ['Bold', 'Italic', 'Underline', '-', 'Subscript', 'Superscript', '-', 'RemoveFormat'], 
    ] 
} 
+0

Danke @petr Ich muss TinyMCE verwenden, ich ändere etwas in meinem admin.py, und jetzt, wenn ich meine Seitenerweiterung öffne, habe ich diesen neuen Fehler. ''ynymce-spellcheck' mit Argumenten '()' und Schlüsselwortargumenten '{}' nicht gefunden. 0 Muster (s) probiert: [] Irgendwelche Idee dazu? – Stone

+1

Sieht so aus, als ob die URL mit dem Alias ​​"tinymce-spellcheck" fehlt. Vielleicht haben Sie eine interne URL-Einrichtung verpasst? Der Editor wird wahrscheinlich Ihre Website über AJAX aufrufen, um eine Rechtschreibprüfung für den Text durchzuführen. – petr

+0

Hallo @petr, vielen Dank, alles in Ordnung, ich vergesse "url (r '^ tinymce /', include ('tinymce.urls')) , 'in meiner' urls.py' Datei. Aber jetzt habe ich diesen neuen Fehler 'jquery.tinymce.min.js: 1 Uncaught TypeError: Kann die Eigenschaft 'fn' von undefined (anonyme Funktion) @ jquery.tinymce.min.js: 1 (anonyme Funktion) @ jquery.tinymce nicht lesen .min.js: 1 init_tinymce.js: 16 Uncaught ReferenceError: tinyMCE ist nicht definiert "Ich ändere meine Anfrage, meine Einstellungsdatei bezüglich tinyMCE hinzuzufügen. Ich suche nach Google und jeder sagte, dass ich vor der Jquery-Bibliothek lesen muss, die ich habe. Irgendeine Idee! – Stone