2011-10-30 19 views

Respuesta

9

Puede utilizar tinymce través django-tinymce:

http://code.google.com/p/django-tinymce/

También se puede usar tinymce en cada campo de texto o Charfield en el admin, o simplemente puede añadir a cada campo en particular.

Para el primero, puede usar cada cuadro de caracteres o campo de texto para utilizar tinymce utilizando la configuración del modelo de administrador formfield_overides. Así que en su admin.py:

formfield_overrides = { 
    models.TextField: {'widget': TinyMCE(attrs={'cols': 80, 'rows': 30})}, 
} 

Para este último cambia el widget para el campo que desea utilizar en tinymce. Así que en su forms.py:

class BlogForm(ModelForm): 
    body = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) 

y luego decirle al administrador para utilizar este formulario (en admin.py):

from models import Blog 
from forms import BlogForm 

class BlogAdmin(ModelAdmin): 
    form = BlogForm() 
+0

Encontré esto en la red: https://github.com/pydanny/django-wysiwyg. ¿Tiene algo de bueno? – Adnan

+0

No lo he usado pero estoy seguro de que también hace el trabajo. –

+0

¿creo un forms.py porque actualmente no tengo uno? – Adnan

8

que tiene que hacer algunas cosas simples (NicEdit WYSIWYG como ejemplo) :

1) descargue el editor necesario y guárdelo en alguna carpeta de su proyecto, digamos en la carpeta de medios;

2) en urls.py añadir siguientes líneas:

import os 

PROJECT_DIR = os.path.dirname(__file__) 

urlpatterns = patterns('', 
    ..., 
    (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': PROJECT_DIR + r'/media/'}), 
    ..., 
) 

3) crear la carpeta 'admin' en la carpeta de plantillas y copia de archivos no base.py de django/contrib/admin/templates/admin/base .py;

4) base.py archivo abierto y editar esa manera - 9 primeras filas no se tocan en absoluto, pero después de la fila 9 de añadir siguiente código:

<script type="text/javascript" src="/media/nicedit/nicEdit.js"></script> 
<script type="text/javascript"> 
    bkLib.onDomLoaded(function() { 
     nicEditors.allTextAreas({iconsPath : '/media/nicedit/nicEditorIcons.gif', 
      buttonList : ['fontSize','fontFamily','bold','italic', 
       'underline','strikeThrough','left','center','right','justify', 
       'ol','ul','subscript','superscript','hr','link','unlink','forecolor', 
       'image','upload','xhtml'] 
     }); 
    }); 
</script> 

eso es todo. Ahora en el panel de administración en todas las áreas de texto, estará disponible su WYSIWYG.

1

Traté de implementar la solución dada por Vitali Ponomar.

elijo NicEdit porque eran sólo dos archivos JavaScript (nicEdit.js y nicEditorIcons.gif) que pongo en mi carpeta /media/js/ y no requiere cambiar mis tipos de campos en el modelo (que vi en TinyMCE Documentation que requiere para cambiar el campo a un tipo de campo HTMLField y no quería cambiar nada en la base de datos).

puse en el modelo:

class NewsAdmin(admin.ModelAdmin): 
    list_display = ('title','lead','date') 
    class Media: 
     js = ('/media/js/nicEdit.js', '/media/js/textarea_content.js') 

admin.site.register(News, NewsAdmin) 

El archivo textarea_content.js que puse en /media/js/ carpeta también se utiliza para inicializar un área de texto específico con algunos botones específicos es:

bkLib.onDomLoaded(function() { 
nicEditors.editors.push(
    new nicEditor({iconsPath : '/media/js/nicEditorIcons.gif', 
     buttonList : ['fontSize','fontFamily','bold','italic', 
      'underline','strikeThrough','left','center','right','justify', 
      'ol','ul','subscript','superscript','hr','link','unlink','forecolor'] 
    }).panelInstance(
     document.getElementById('id_content') 
    ) 
); 
}); 

Sin embargo, si planean usarlo para todas las áreas de texto; puede usar bkLib.onDomLoaded(nicEditors.allTextAreas); en lugar del código anterior.

Finalmente, tenga cuidado con los permisos (cuando probé por primera vez en el entorno de producción mis archivos javascript no estaban disponibles debido a los permisos).