Django中在xadmin中集成DjangoUeditor过程详解


Posted in Python onJuly 24, 2019

环境

python版本:3.6

django:1.10.8

1.下载xadmin

https://github.com/sshwsfc/xadmin

下载DjangoUeditor

https://github.com/twz915/DjangoUeditor3

2.直接将xadmin和DjangoUeditor集成在pycharm里,在项目下新建一个文件夹extra_apps,将与xadmin、DjangoUeditor的同名文件复制在extra_apps下

Django中在xadmin中集成DjangoUeditor过程详解

3.在settings.py里注册DjangoUeditor

INSTALLED_APPS = [
 ...
 #xadmin第三方插件,实现富文本编辑
 'DjangoUeditor'
]

4.在url里对其进行配置

url(r'^ueditor/',include('DjangoUeditor.urls'))

5.在xadmin中添加插件ueditor

Django中在xadmin中集成DjangoUeditor过程详解

在xadmin-》plugins下新建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)

6.在xadmin-》plugins-》__init__.py中添加ueditor

PLUGINS = (
 'actions',
 'filters',
 'bookmark',
 'export',
 'layout',
 'refresh',
 'details',
 'editable',
 'relate',
 'chart',
 'ajax',
 'relfield',
 'inline',
 'topnav',
 'portal',
 'quickform',
 'wizard',
 'images',
 'auth',
 'multiselect',
 'themes',
 'aggregation',
 'mobile',
 'passwords',
 'sitemenu',
 'language',
 'quickfilter',
 'sortablelist',
 'importexport'
 'ueditor'
)

7.将ueditor添加到adminx.py中

这里的NoticeContent是指使用UEditorField的字段

class NoticeAdmin(object): list_display = ['NoticeTitle', 'NoticeContent','NoticeDesc','NoticeCategory', 'NoticeData','NoticeUser'] style_fields={"NoticeContent":"ueditor"}

8.运行结果:

Django中在xadmin中集成DjangoUeditor过程详解

9.前端显示需要加上:

{% autoescape off %}
{% endautoescape %}

注意:要想在富文本编辑框中显示出图片,必须在settings.py里设置路径:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/')  #设置静态文件路径为主目录下的media文件夹
MEDIA_URL = '/media/'

在与项目同名的文件下的urls.py中添加:

urlpatterns = [
 url('admin/', admin.site.urls),
 url(r'^ueditor/',include('DjangoUeditor.urls')),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

否则无法显示图片。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现获取客户机上指定文件并传输到服务器的方法
Mar 16 Python
python 如何快速找出两个电子表中数据的差异
May 26 Python
python批量设置多个Excel文件页眉页脚的脚本
Mar 14 Python
Python实现OpenCV的安装与使用示例
Mar 30 Python
python判断完全平方数的方法
Nov 13 Python
python dataframe向下向上填充,fillna和ffill的方法
Nov 28 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
anaconda如何查看并管理python环境
Jul 05 Python
使用python 对验证码图片进行降噪处理
Dec 18 Python
Python 脚本的三种执行方式小结
Dec 21 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
python 检测图片是否有马赛克
Dec 01 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
Jul 24 #Python
Django 创建/删除用户的示例代码
Jul 24 #Python
python3.6+django2.0+mysql搭建网站过程详解
Jul 24 #Python
简单了解python 邮件模块的使用方法
Jul 24 #Python
python 根据字典的键值进行排序的方法
Jul 24 #Python
如何使用Flask-Migrate拓展数据库表结构
Jul 24 #Python
Python定时任务工具之APScheduler使用方式
Jul 24 #Python
You might like
实用函数10
2007/11/08 PHP
php class类的用法详细总结
2013/10/17 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
CodeIgniter框架基本增删改查操作示例
2017/03/23 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
js一维数组、多维数组和对象的混合使用方法
2016/04/03 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
如何用itertools解决无序排列组合的问题
2017/05/18 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
深入了解python中元类的相关知识
2019/08/29 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
法人代表授权委托书
2014/04/08 职场文书
大学生创业计划书
2014/08/14 职场文书
检讨书格式
2015/01/23 职场文书