很多时候我们都在python和Django3.2.8环境下使用DjangoUEditor实现富文本的使用和编辑,今晚踩坑比较多,小结一下,或许对各位大虾有点小小的启发。
1、DjangoUEditor的安装
1.1、DjangoUEditor一般需要自行下载,各位可以从github.com(国外)或者gitee.com(国内)中找到,版本稍有些早。
1.2、安装
DjangoUEditor安装包解压缩后,进入到DjangoUEditor文件夹,可以看到有个setup.py的文件执行python setup.py install 进行安装即可。
python setup.py install
2、DjangoUEditor在项目中的使用
2.1、将DjangoUEditor文件夹中的DjangoUeditor文件夹复制到项目目录中;
2.2、打开项目目录的settings.py,在INSTALLED_APPS项中增加:
INSTALLED_APPS = [
......
'DjangoUeditor', #添加富文本编辑器
......
]
2.3、打开项目目录的urrls.py,增加DjangoUEditor路由
urlpatterns = [
...
path('ueditor/',include('DjangoUeditor.urls')), #富文本编辑器
...
]
2.4、在项目中的某个应用中,打开models.py,定义一个DjangoUEditor的字段
from django.db import models
from DjangoUeditor.models import UEditorField
# Create your models here.
class MyNew(models.Model):
description = UEditorField(u'内容', #该字段在后台系统中的别名
default='',
width=1000, #在后台系统中编辑界面的宽度
height=300, #在后台系统中编辑界面的长度
imagePath='news/images/', #用户上传图片的路径
filePath='news/files/') #用户删除文件的路径
def __str__(self):
return self.title
class Meta:
verbose_name = "测试"
verbose_name_plural = verbose_name
2.5、在应用的admin.py中添加如下内容:
from django.contrib import admin
from .models import MyNew
# Register your models here.
class MyNewAdmin(admin.ModelAdmin):
style_fields = {'description': 'ueditor'}
admin.site.register(MyNew, MyNewAdmin)
以上做完以后,就可以在后台使用DjangoUEditor了。
但是......
上传图形出错、上传视频出错......呜呜呜........
3、需要修改的几处代码
原因:django3.x以后six、urllib、south都已经被移除,所以需要修改部分代码
3.1、DjangoUeditor\widgets.py
from django.utils.six import string_types
修改为:
from six import string_types
3.2、DjangoUeditor\view.py
from django.utils import six
from django.utils.six.moves.urllib.request import urlopen
from django.utils.six.moves.urllib.parse import urljoin
改为:
import six
from six.moves.urllib.request import urlopen
from six.moves.urllib.parse import urljoin
3.3、DjangoUeditor\commands.py
from django.utils.six.moves.urllib.parse import urljoin
改为:
from urllib.parse import urljoin
3.4、DjangoUeditor\utils.py
from django.utils import six
改为
import six
3.5、DjangoUeditor\models.py
# 以下支持south
try:
from south.modelsinspector import add_introspection_rules
add_introspection_rules([], ["^DjangoUeditor\.models\.UEditorField"])
except:
pass
需要安装south控件,才能更好地支持新版本的浏览器:
pip install south
3.6、修改django安装目录下的\forms\boundfield.py文件:
...
def as_widget(self, widget=None, attrs=None, only_initial=False):
"""
Render the field by rendering the passed widget, adding any HTML
attributes passed as attrs. If a widget isn't specified, use the
field's default widget.
"""
widget = widget or self.field.widget
if self.field.localize:
widget.is_localized = True
attrs = attrs or {}
attrs = self.build_widget_attrs(attrs, widget)
if self.auto_id and 'id' not in widget.attrs:
attrs.setdefault('id', self.html_initial_id if only_initial else self.auto_id)
return widget.render(
name=self.html_initial_name if only_initial else self.html_name,
value=self.value(),
attrs=attrs,
#renderer=self.form.renderer, #此行需要进行注释
)
...
好吧!至此,至少我的DjangoUeditor可以正常使用了。
以上经验仅供参考!