Django TypeError: render() got an unexpected keyword argument 'renderer'

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 行注释掉就好了

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值