django——xadmin中集成富文本编辑器ueditor

Posted welan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django——xadmin中集成富文本编辑器ueditor相关的知识,希望对你有一定的参考价值。

一、安装

  • pip命令安装,由于ueditor为百度开发的一款富文本编辑框,现已停止维护,如果解释器为python2,则直接pip install djangoueditor
  • 解压包安装,python3以上的版本需要下载压缩包解压安装 下载地址
    步骤
    1. 到下载地址下载并解压
    2. cmd进入该文件夹根目录python setup.py install直接安装到当前site-package中

二、添加app

将djangoueditor添加到setting.py中

INSTALLED_APPS = [
...
‘DjangoUeditor‘,]

三、添加url

将URL添加到urlpatterns中去:

#富文本编辑器
url(r‘^ueditor/‘,include(‘DjangoUeditor.urls‘ )),

四、修改model字段

django自带的富文本编辑框为models.Textfield()
from DjangoUeditor.models import UEditorField

class Course(models.Model):
    name = models.CharField(max_length=20, verbose_name='课程名称')
    desc = models.TextField(verbose_name='课程描述')
    detail = UEditorField(verbose_name='课程详情',width=600, height=300, toolbars="full", imagePath="course/ueditor/", filePath="course/ueditor/", upload_settings={"imageMaxSize":1204000},default='')

说明:
width,height :编辑器的宽度和高度,以像素为单位。imagePath :图片上传后保存的路径,如"images/",实现上传到"{{MEDIA_ROOT}}/images"文件夹。 注意:如果imagePath值只设置文件夹,则未尾要有"/" imagePath可以按python字符串格式化:如"images/%(basename)s_%(datetime)s.%(extname)s"。这样如果上传test.png,则文件会 被保存为"{{MEDIA_ROOT}}/images/test_20140625122399.png"。 filePath : 附件上传后保存的路径,设置规则与imagePath一样。更多用法

五、xadmin中添加插件ueditor

由于已经将xadmin源文件拷贝到了项目下,本文为extra_apps/xadmin,在xadmin下的plugin中新建一个ueditor.py文件,里面写入如下:

import xadmin
from xadmin.views import BaseAdminPlugin, CreateAdminView, ModelFormAdminView, UpdateAdminView
from DjangoUeditor.models import UEditorField
from DjangoUeditor.widgets import UEditorWidget
from django.conf import settings

class XadminUEditorWidget(UEditorWidget):
def init(self,**kwargs):
self.ueditor_options=kwargs
self.Media.js = None
super(XadminUEditorWidget,self).__init__(kwargs)

class UeditorPlugin(BaseAdminPlugin):

def get_field_style(self, attrs, db_field, style, **kwargs):
    if style == 'ueditor':
        if isinstance(db_field, UEditorField):
            widget = db_field.formfield().widget
            param = {}
            param.update(widget.ueditor_settings)
            param.update(widget.attrs)
            return {'widget': XadminUEditorWidget(**param)}
    return attrs

def block_extrahead(self, context, nodes):
    js = '<script type="text/javascript" src="%s"></script>' % (settings.STATIC_URL + "ueditor/ueditor.config.js")         #自己的静态目录
    js += '<script type="text/javascript" src="%s"></script>' % (settings.STATIC_URL + "ueditor/ueditor.all.min.js")   #自己的静态目录
    nodes.append(js)

xadmin.site.register_plugin(UeditorPlugin, UpdateAdminView)
xadmin.site.register_plugin(UeditorPlugin, CreateAdminView)

六、将ueditor添加到plugin下的_init_中


PLUGINS = (
...
‘ueditor‘,
)

七、将ueditor添加到adminx.py中


class CourseAdmin(object):
...
style_fields = {"detail": "ueditor"}

八、前端页面转义

浏览器为了web安全在对后端传来的html代码会进行转义,会将<>等符号进行转义,因此要对页面设置过滤器防止字符转义,

{% autoescape off %}
{{ course.detail }}
{% endautoescape %}
过滤器更多用法

以上是关于django——xadmin中集成富文本编辑器ueditor的主要内容,如果未能解决你的问题,请参考以下文章

django中集成富文本编辑器

使用Flask-CKEditor在Flask项目中集成富文本编辑器

Django中在xadmin中集成DjangoUeditor

django xadmin 集成DjangoUeditor富文本编辑器

Django1.9开发博客(14)- 集成Xadmin

Flask 项目集成富文本编辑器 CKeditor