• 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 %}

    过滤器更多用法

  • 相关阅读:
    详解Go变量类型的内存布局
    saltstack手册(含官方pdf)
    Linux之《荒岛余生》(三)内存篇
    linux之网络
    Linux之IO
    【WPF】提高InkAnalyer手写汉字识别的准确率
    mssql 小技巧
    WCF Data Service
    jQuery基础之选择器
    Window程序的安装与部署
  • 原文地址:https://www.cnblogs.com/welan/p/9460721.html
Copyright © 2020-2023  润新知