Django管理后台集成kindeditor文本编辑器

django后台默认没有富文本编辑器,我们这里做一下kindeditor集成。

 

1、在工程目录下新建静态文件目录static/js/,下载kindeditor解压到该目录下。最后目录结构如下:

 

 

 

在kindeditor下新建一个config.js文件:

 

 

在config.js文件中添加内容:

KindEditor.ready(function(K) {

    K.create('textarea[name="body"]', {

        width : "800px",
        height : "500px",

        uploadJson: '/admin/uploads/kindeditor',

    });

});

 

其中name根据models.py中对应的字段名修改(就是文章内容对应的变量)

 

 

2、在应用目录下新建一个upload.py

 

内容:

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from django.conf import settings

from django.views.decorators.csrf import csrf_exempt

import os

import uuid

import json

import datetime as dt

 

 

@csrf_exempt

def upload_image(request, dir_name):

    ##################

    #  kindeditor图片上传返回数据格式说明:

    # {"error": 1, "message": "出错信息"}

    # {"error": 0, "url": "图片地址"}

    ##################

    result = {"error": 1, "message": "上传出错"}

    files = request.FILES.get("imgFile", None)

    if files:

        result = image_upload(files, dir_name)

    return HttpResponse(json.dumps(result), content_type="application/json")

 

 

# 目录创建

def upload_generation_dir(dir_name):

    today = dt.datetime.today()

    dir_name = dir_name + '/%d/%d/' % (today.year, today.month)

    if not os.path.exists(settings.MEDIA_ROOT):

        os.makedirs(settings.MEDIA_ROOT)

    return dir_name

 

 

# 图片上传

def image_upload(files, dir_name):

    # 允许上传文件类型

    allow_suffix = ['jpg', 'png', 'jpeg', 'gif', 'bmp']

    file_suffix = files.name.split(".")[-1]

    if file_suffix not in allow_suffix:

        return {"error": 1, "message": "图片格式不正确"}

    relative_path_file = upload_generation_dir(dir_name)

    path = os.path.join(settings.MEDIA_ROOT, relative_path_file)

    if not os.path.exists(path):  # 如果目录不存在创建目录

        os.makedirs(path)

    file_name = str(uuid.uuid1()) + "." + file_suffix

    path_file = os.path.join(path, file_name)

    file_url = settings.MEDIA_URL + relative_path_file + file_name

    open(path_file, 'wb').write(files.file.read())

    return {"error": 0, "url": file_url}

 

 

 

3、在settings中添加配置

 

STATICFILES_DIRS = [

    os.path.join(BASE_DIR, 'static'),

]

 

 

4、在admin.py中添加对应管理栏目的media类

 

    class Media:

        js = ('/static/js/kindeditor/kindeditor-all-min.js',

              '/static/js/kindeditor/lang/zh-CN.js',

              '/static/js/kindeditor/config.js')

 

 

最终效果如下:

 

5、配置upload目录

在工程目录下新建uploads目录

 

6、再次修改settings,添加:

MEDIA_URL = "/uploads/"

MEDIA_ROOT = os.path.join(BASE_DIR, "uploads")

 

 

7、配置urls.py:

添加import模块

from django.conf import settings

from news import upload

from django.views.static import serve

 

 

url中添加:

 

    url(r'^admin/uploads/(?P<dir_name>[^/]+)$', upload.upload_image, name='upload_image'),

    url(r"^uploads/(?P<path>.*)$", serve, {"document_root": settings.MEDIA_ROOT, }),

 

 

 

最终效果:

 

 

 

至此完成。效果图如下:

 

posted @ 2017-10-13 15:48  Haitao.Ji  阅读(236)  评论(0编辑  收藏  举报