欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-13 10:03:32
...

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

相关标签: UEditor