xadmin 添加富文本编辑框UEditor的用法(坑是真的多)

python3以上不能直接用pip install ueditor
python3 安装版本 ueditor 下载

有两种方式安装

1 直接解压后把DjangoUeditor这个目录直接拖进项目目录下
2 cd到你下载的目录

#直接写入pip 
 python setup.py install  
 #查看 安装的依赖包 可以看到已安装了DjangoUeditor
 pip list    

将djangoueditor添加到setting.py中

INSTALLED_APPS = [
    ...
    'DjangoUeditor',
]

#富文本框的设置
UEDITOR_SETTINGS = {
                       "toolbars": {  # 定义多个工具栏显示的按钮,允行定义多个
                           "name1": [['source', '|', 'bold', 'italic', 'underline']],
                           "name2": []
                   },
                   "images_upload":{
                                       "allow_type": "jpg,png",  # 定义允许的上传的图片类型
                                       "max_size": "2222kb"  # 定义允许上传的图片大小,0代表不限制
                                   },
                                   "files_upload": {
    "allow_type": "zip,rar",  # 定义允许的上传的文件类型
    "max_size": "2222kb"  # 定义允许上传的文件大小,0代表不限制
},
"image_manager": {
    "location": ""  # 图片管理器的位置,如果没有指定,默认跟图片路径上传一样
},
}
MEDIA_URL='/upload/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload/')#这个是在浏览器上访问该上传文件的url的前缀

添加url

urlpatterns = [
    . . .
    path('ueditor/',include('DjangoUeditor.urls')),
]

修改model

将模型中需要改为富文本添加的字段,一般为TextField,改为如下:

from DjangoUeditor.models import UEditorField
class PostImg(models.Model):
    # UEditorField继承自models.TextField, 因此你可以直接将model里面定义的models.TextField直接改成UEditorField即可。
    # UEditorField提供了额外的参数:
    # toolbars: 配置你想显示的工具栏,取值为mini, normal, full, besttome, 代表小,一般,全部, 涂伟忠贡献的一种样式。如果默认的工具栏不符合您的要求,您可以在settings里面配置自己的显示按钮。参见后面介绍。
    # imagePath: 图片上传的路径, 如
    # "images/", 实现上传到
    # "{{MEDIA_ROOT}}/images"
    # 文件夹
    # filePath: 附件上传的路径, 如
    # "files/", 实现上传到
    # "{{MEDIA_ROOT}}/files"
    # 文件夹
    # scrawlPath: 涂鸦文件上传的路径, 如
    # "scrawls/", 实现上传到
    # "{{MEDIA_ROOT}}/scrawls"
    # 文件夹, 如果不指定则默认 = imagepath
    # imageManagerPath: 图片管理器显示的路径,如
    # "imglib/", 实现上传到
    # "{{MEDIA_ROOT}}/imglib", 如果不指定则默认 = imagepath。
    # options:其他UEditor参数,字典类型。参见Ueditor的文档ueditor_config.js里面的说明。
    # css: 编辑器textarea的CSS样式
    # width,height: 编辑器的宽度和高度,以像素为单位。
    # ————————————————
     detail = UEditorField(verbose_name = '内容', height=500, width=1000,
                           default=u'', imagePath="Article_img/%%Y/%%m/",
                           toolbars='full', filePath='%%Y/%%m/',
                           upload_settings={"imageMaxSize": 1204000},
                           settings={}, command=None,)

     class Meta:
         verbose_name = '图片管理'
         verbose_name_plural = verbose_name

     def __str__(self):
         return "图片"

xadmin中添加插件ueditor

在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.js")   #自己的静态目录
        nodes.append(js)

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

这俩如果是直接拖进项目的话 此时不用管的静态目录了;如果不是的话把你刚刚下载的如下图

把ueditor 加入到static 目录下 最后文件目录如下

将ueditor添加到plugin下的_init_中

PLUGINS = (
    ...
    'ueditor',
)

将ueditor添加到adminx.py中

class PostImgAdmin(object):
    list_display = ['detail',]
    #添加富文本编辑框(注意这里的字段要与你上面定义的字段名一样否者显示不出来)
    style_fields = {"detail": "ueditor"}

在前端显示的话,需要对html页面修改如下来阻止字符的转义

就是前端界面使用PostImg.detail这个字段的时候

{% autoescape off %}
{{ postImg.detail }}
{% endautoescape %}

最后运行

评论