Ueditor 使用笔记
由于django 2.1 有所变化,导致使用富文本 UEditor 报错:
直接看报错解决办法:请点击
报错信息:
Django TypeError: render() got an unexpected keyword argument 'renderer'
下载UEditor 源代码:github 地址
xadmin 没有python3 版本的, 因此不能使用
pip
安装,需要拷贝源代码
并拷贝到项目文件夹下面
在项目文件夹下面创建一个extra_apps 文件夹, 用来放扩展应用,然后在项目的 setting.py 文件中添加路径配置。 或者在site-packages 里面替换也行
import sys
# 设置 extra_apps 目录
# 项目文件夹下的setting文件
sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))
将 DjangoUeditor 添加到setting.py 配置文件 INSTALLED_APPS 中
INSTALLED_APPS = [
# 配置另一个富文本
'DjangoUeditor',
]
配置url 信息
# 添加富文本url
# url(r'^ckeditor/', include('ckeditor_uploader.urls')),
url(r'^ueditor/', include('DjangoUeditor.urls')),
在xadmin中添加插件UEditor的文件
将 xadmin 源文件拷贝到项目下面的 extra_apps/xadmin (若没有创建文件夹拷贝源代码,则需在 site-packages 文件夹下找到xadmin 源代码文件夹也是可以的),在 xadmin 下的 plugin 中新建一个ueditor.py , 写入以下代码:
#!/usr/bin/python3
# -*-coding:utf-8-*-
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 添加到 plugin 下的 __ init __.py 中
PLUGINS = (
'ueditor',
)
将 ueditor 添加到项目对应应用的 adminx.py 中
class AppAdmin(object):
# TODO 注意这里是content字段是你富文本字段的名称
style_fields = {'content': 'ueditor'}
需要在前端显示,则要对 html 页面进行 禁用转义
{% autoescape off %}
{{ course.detail }}
{% endautoescape %}
以下两种解决办法:
1. 修改 xadmin 源代码
1.在Python终端输入命令help(‘xadmin’) 查看xadmin安装位置 得到如下输出
FILE
/root/anaconda3/envs/learndjango/lib/python3.5/site-packages/xadmin/__init__.py
2.进入xadmin安装路径,编辑xadmin/views/dashboard.py, 搜索所有xadmin 下的代码,有通通给这个方法加参数 renderer=None
#render() got an unexpected keyword argument 'renderer'
#修改bug, 添加renderer
#by prism 2018/10/4
def render(self, name, value, attrs=None, renderer=None):
2. 修改 django 源代码
按照报错信息: /lib/site-packages/django/forms/boundfield.py in as_widget, line 93
将 boundfield.py 中的第 93 行注释掉就好了