Django的安装和生成项目这里不介绍了。
DjangoUeditor下载地址:https://github.com/zhangfisher/DjangoUeditor
使用python setup.py install 安装, 推荐使用pip install DjangoUeditor安装,
1. 将python安装目录下生成的/site-packages/DjangoUeditor/static/ueditor 复制到自己的django项目的media目录下.
2. 在自己的templete下面的需要使用富文本的html文件中包含进来刚才复制过来的ueditor目录下的这三个文件:/ueditor/ueditor.config.js, /ueditor/ueditor.all.js,/ueditor/themes/default/css/ueditor.css
3. 在html中需要的位置增加textarea控件: <textarea id="content" name="content" rows="20"></textarea> , 接下来增加Js语句:
<script> var ue=new UE.ui.Editor(); ue.render('content'); </script>
这时去通过django访问这个页面,已经能看到如下图的富文本编辑框了:
但是这里的图片是没法上传的,因为需要后台配置,
我们打开ueditor.config.js
找到
/** * 配置项主体。注意,此处所有涉及到路径的配置别遗漏URL变量。 */ window.UEDITOR_CONFIG = { //为编辑器实例添加一个路径,这个不能被注释 UEDITOR_HOME_URL: URL // 服务器统一请求接口路径 , serverUrl: "php/controller.php" // ,catchRemoteImageEnable:false //工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的从新定义 , toolbars: [[ 'fullscreen', 'source', '|','simpleupload', 'undo', 'redo', '|', 'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|', 'rowspacingtop', 'rowspacingbottom', 'lineheight', '|', 'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|', 'directionalityltr', 'directionalityrtl', 'indent', '|', 'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'horizontal', 'date', 'time', 'spechars', '|', 'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', ]]
这里,我们看到服务器统一请求接口路径为php路径下的controller.php,但是这里我们使用django去写这个请求接口:
将serverUrl改为我们django的接口地址,接下来在django项目中新建名为Ueditor的目录,这里不需要添加到django的app中,这个目录结构如下:
config.py文件为配置文件,里面的数据是从ueditor/php/config.json中取出来的一个配置列表:
# coding=utf-8 # /* 前后端通信相关的配置,注释只允许使用多行方式 */ config = { # /* 上传图片配置项 */ "imageActionName": "uploadimage", # /* 执行上传图片的action名称 */ "imageFieldName": "upfile", #/* 提交的图片表单名称 */ "imageMaxSize": 2048000, #/* 上传大小限制,单位B */ "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], #/* 上传图片格式显示 */ "imageCompressEnable": True, #/* 是否压缩图片,默认是true */ "imageCompressBorder": 1600, #/* 图片压缩最长边限制 */ "imageInsertAlign": "none", #/* 插入的图片浮动方式 */ "imageUrlPrefix": "", #/* 图片访问路径前缀 */ "imagePathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", #/* 上传保存路径,可以自定义保存路径和文件名格式 */ # /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */ #/* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */ #/* {time} 会替换成时间戳 */ #/* {yyyy} 会替换成四位年份 */ #/* {yy} 会替换成两位年份 */ #/* {mm} 会替换成两位月份 */ # /* {dd} 会替换成两位日期 */ # /* {hh} 会替换成两位小时 */ # /* {ii} 会替换成两位分钟 */ # /* {ss} 会替换成两位秒 */ # /* 非法字符 \ : * ? " < > | */ # /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */ # /* 涂鸦图片上传配置项 */ "scrawlActionName": "uploadscrawl", # /* 执行上传涂鸦的action名称 */ "scrawlFieldName": "upfile", # /* 提交的图片表单名称 */ "scrawlPathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", # /* 上传保存路径,可以自定义保存路径和文件名格式 */ "scrawlMaxSize": 2048000, #/* 上传大小限制,单位B */ "scrawlUrlPrefix": "", #/* 图片访问路径前缀 */ "scrawlInsertAlign": "none", # /* 截图工具上传 */ "snapscreenActionName": "uploadimage", # /* 执行上传截图的action名称 */ "snapscreenPathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", #/* 上传保存路径,可以自定义保存路径和文件名格式 */ "snapscreenUrlPrefix": "", # /* 图片访问路径前缀 */ "snapscreenInsertAlign": "none", #/* 插入的图片浮动方式 */ # /* 抓取远程图片配置 */ "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"], "catcherActionName": "catchimage", #/* 执行抓取远程图片的action名称 */ "catcherFieldName": "source", # /* 提交的图片列表表单名称 */ "catcherPathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", #/* 上传保存路径,可以自定义保存路径和文件名格式 */ "catcherUrlPrefix": "", #/* 图片访问路径前缀 */ "catcherMaxSize": 2048000, #/* 上传大小限制,单位B */ "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], #/* 抓取图片格式显示 */ # /* 上传视频配置 */ "videoActionName": "uploadvideo", #/* 执行上传视频的action名称 */ "videoFieldName": "upfile", # /* 提交的视频表单名称 */ "videoPathFormat": "/ueditor/php/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", #/* 上传保存路径,可以自定义保存路径和文件名格式 */ "videoUrlPrefix": "", #/* 视频访问路径前缀 */ "videoMaxSize": 102400000, #/* 上传大小限制,单位B,默认100MB */ "videoAllowFiles": [ ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], # /* 上传视频格式显示 */ # /* 上传文件配置 */ "fileActionName": "uploadfile", #/* controller里,执行上传视频的action名称 */ "fileFieldName": "upfile", # /* 提交的文件表单名称 */ "filePathFormat": "/ueditor/php/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", #/* 上传保存路径,可以自定义保存路径和文件名格式 */ "fileUrlPrefix": "", #/* 文件访问路径前缀 */ "fileMaxSize": 51200000, #/* 上传大小限制,单位B,默认50MB */ "fileAllowFiles": [ ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" ], #/* 上传文件格式显示 */ # /* 列#出指定目录下的图片 */ "imageManagerActionName": "listimage", #/* 执#行图片管理的action名称 */ "imageManagerListPath": "/ueditor/php/upload/image/", #/* 指定要列出图片的目录 */ "imageManagerListSize": 20, # /* 每次列出文件数量 */ "imageManagerUrlPrefix": "", #/* 图片访问路径前缀 */ "imageManagerInsertAlign": "none", #/* 插入的图片浮动方式 */ "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], #/* 列出的文件类型 */ # /* 列出指定目录下的文件 */ "fileManagerActionName": "listfile", #/* 执行文件管理的action名称 */ "fileManagerListPath": "/ueditor/php/upload/file/", #/* 指定要列出文件的目录 */ "fileManagerUrlPrefix": "", #/* 文件访问路径前缀 */ "fileManagerListSize": 20, #/* 每次列出文件数量 */ "fileManagerAllowFiles": [ ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" ] #/* 列出的文件类型 */ }
在文件views.py中就是我们为前台的富文本写的配置和上传图片的接口:
# coding:utf-8 ''' Created on 2012-8-29 @author: yihaomen.com ''' import json import os import time import uuid from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt from goodnet import settings from app.Ueditor.config import config def customConfig(request): params = request.GET if params['action'] == 'uploadimage': return ueditor_ImgUp(request) return HttpResponse(json.dumps(config)) def __myuploadfile(fileObj, source_pictitle, source_filename, fileorpic='pic'): """ 一个公用的上传文件的处理 """ myresponse = "" if fileObj: filename = fileObj.name fileExt = filename.split('.')[1] file_name = str(uuid.uuid1()) subfolder = time.strftime("%Y%m") if not os.path.exists(settings.SRC_ROOT[1] + subfolder): os.makedirs(settings.SRC_ROOT[1] + subfolder) path = str(subfolder + '/' + file_name + '.' + fileExt) if fileExt.lower() in ( 'jpg', 'jpeg', 'bmp', 'gif', 'png', "rar", "doc", "docx", "zip", "pdf", "txt", "swf", "wmv"): phisypath = settings.SRC_ROOT[1] + path destination = open(phisypath, 'wb+') for chunk in fileObj.chunks(): destination.write(chunk) destination.close() real_url = '/static/img/' + subfolder + '/' + file_name + '.' + fileExt myresponse = "{'original':'%s','url':'%s','title':'%s','state':'%s'}" % ( source_filename, real_url, source_pictitle, 'SUCCESS') return myresponse @csrf_exempt def ueditor_ImgUp(request): """ 上传图片 """ fileObj = request.FILES.get('upfile', None) source_pictitle = request.POST.get('pictitle', '') source_filename = request.POST.get('fileName', '') response = HttpResponse() myresponse = __myuploadfile(fileObj, source_pictitle, source_filename, 'pic') response.write(myresponse) return response
然后再django根目录下的urls.py中增加url对应到views.py中的customConfig函数来。保证ueditor.config.js中配置的serverUrl能够访问到customConfig函数, 在customConfig函数里面,判断前端js的get参数action,如果为uploadimage则转到自己的图片上传方法,返回的数据为构建的
{'original':'%s','url':'%s','title':'%s','state':'%s'}
的一个字符串。确保返回的url能够访问到上传上来的图片。配置过程中的路径,需要根据需要自行配置。
最后测试富文本添加图片:
至此,使用DjangoUeditor在django下富文本的配置成功。