Django 集成富文本KindEditor
前提条件:
1、下载 kindeditor-4.1.10 并放到static目录中
第一步:
在项目根目录创建media目录,然后配置media_url和media_root
MEDIA_URL = "/media/" MEDIA_ROOT = os.path.join(BASE_DIR, "media")
第二步:
在urls.py中配置media url和upload_image url
url(r'media/(?P<path>.*)/$', serve, {"document_root": MEDIA_ROOT}), url(r'^upload_image/$', UploadImageView.as_view(), name="upload_image"),
第三步:
在views.py中配置UploadImageView视图

class UploadImageView(View): """ 富文本图片上传 """ def post(self, request): images_dir = "kind_editor_upload_images" result = {'error': 1, 'message': '上传出错'} image = request.FILES.get('imgFile', None) if image: result = self.image_upload(image, images_dir) return HttpResponse(json.dumps(result)) def image_upload(self, image, images_dir): """ 图片上传 :param image: 接收图片文件 :param images_dir: 接收图片上传根目录 :return: 返回图片url """ allow_suffix = ['jpg', 'png', 'jpeg', 'git', 'bmp'] # 允许上传的图片类型 image_suffix = image.name.split('.')[-1] if image_suffix not in allow_suffix: return {'error': 1, 'message': '图片格式不正确'} relative_file_path = self.image_dir(images_dir) dir_path = os.path.join(settings.MEDIA_ROOT, relative_file_path) if not os.path.exists(dir_path): os.makedirs(dir_path) image_name = str(uuid.uuid1()) + '.' + image_suffix image_path = os.path.join(dir_path, image_name) image_url = settings.MEDIA_URL + relative_file_path + image_name open(image_path, 'wb').write(image.file.read()) return {'error': 0, 'url': image_url} def image_dir(self, images_dir): """ 生成图片目录 :param images_dir: 接收图片上传根目录 :return: 返回当前日期生成的图片目录 """ today = datetime.today() images_dir += '/%d/%d/' % (today.year, today.month) return images_dir
第四步:
在HTML Template中配置KindEditor JS代码 (注意JS代码中的CSRF_TOKEN)

<!DOCTYPE html> {% load staticfiles %} <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="{% static "kindeditor-4.1.10/themes/default/default.css" %}"> <link rel="stylesheet" href="{% static "css/bootstrap11.css" %}"> <script src="{% static "js/jquery-3.2.1.js" %}"></script> <script src="{% static "kindeditor-4.1.10/kindeditor-all-min.js" %}"></script> </head> <body> <div style="margin-bottom: 50px" class="col-md-12"> <form action="{% url "article" %}" method="post" class="col-md-6"> <input type="text" name="title" class="form-control col-md-6"> <textarea id="content" name="content" class="form-control col-md-6"></textarea> {% csrf_token %} <input type="submit" value="submit"> </form> </div> <div> <h1>文章列表</h1> {% for article in articles %} <div style="margin-bottom: 20px"> <ul> <li>{{ article.title }}</li> <li>{{ article.content|safe }}</li> </ul> </div> {% endfor %} </div> </body> <script> var csrfitems = document.getElementsByName("csrfmiddlewaretoken"); var csrftoken = ""; if(csrfitems.length > 0) { csrftoken = csrfitems[0].value; } $(function () { initKindEditor(); }); function initKindEditor() { $.ajaxSetup({ data: {csrfmiddlewaretoken: '{{ csrf_token }}'} }); var kind = KindEditor.create('#content', { width: '900px', // 文本框宽度(可以百分比或像素) height: '300px', // 文本框高度(只能像素) minWidth: 200, // 最小宽度(数字) minHeight: 400, // 最小高度(数字) uploadJson: '{% url "upload_image" %}', extraFileUploadParams : { csrfmiddlewaretoken: csrftoken } }); } </script> </html>
效果: