Django中富文本编辑器KindEditor的使用和图片上传

1.简介

KindEditor 是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本输入框。 KindEditor 使用 JavaScript 编写,可以无缝地与 Java、.NET、PHP、ASP 等程序集成,比较适合在 CMS、商城、论坛、博客、Wiki、电子邮件等互联网应用上使用

2.主要特点

快速:体积小,加载速度快
开源:开放源代码,高水平,高品质
底层:内置自定义 DOM 类库,精确操作 DOM
扩展:基于插件的设计,所有功能都是插件,可根据需求增减功能
风格:修改编辑器风格非常容易,只需修改一个 CSS 文件
兼容:支持大部分主流浏览器,比如 IE、Firefox、Safari、Chrome、Opera
3.使用

3.1下载路径: http://kindeditor.net/down.php

下载后根据需求删除以下目录。

asp - ASP程序
asp.net - ASP.NET程序
php - PHP程序
jsp - JSP程序
examples - 演示文件
3.2将文件夹拷贝到项目根目录的/static/文件夹中:

3.3在kineeditor目录下创建conifg.js配置文件

#config.js

KindEditor.ready(function(K) {
        // K.create('textarea[name=content]', {
        K.create('#id_content', {
            width: '800px',
            height: '500px',
        });
});

注释: 这里的#id_content,或是name=content,是通过登录admin后,右击对应控件,选择审查元素获得的。

3.4在admin.py对应的管理类中添加class Media,引入js文件。

from .models import  Article
class ArticleAdmin(admin.ModelAdmin):
    list_display = ['title']
    class Media:
        js = ('/static/js/kindeditor-4.1.10/kindeditor-all-min.js',
              '/static/js/kindeditor-4.1.10/lang/zh-CN.js',
              '/static/js/kindeditor-4.1.10/config.js')

admin.site.register(Article,ArticleAdmin)

Blog中有文章Model,文章内容会包括各种格式的数据,比如:图片、超链接、段落等。为了达到这个目的,我们可以使用富文本编辑器。

我们有多重选择来使用富文本编辑器,比如kindeditor、django-ckeditor、自定义ModelAdmin的媒体文件。

这样就将kindeditor加上了富文本编辑器。

4.图片上传

但是如果我们上次图片仍然会报错,因为我们并没有处理文件上传按钮。

4.1:在config.js加入

'uploadJson':'/admin/upload/kindeditor',

这里/admin/upload/kindeditor是python的路由。

在url.py中有配置url(r'^admin/upload/(?P<dir_name>[^/]+)$', upload_image, name='upload_image'),

dir_name是文件的存储路径。

4.2:upload_image是自定义的保存图片的函数,新建upload.py 。

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()
    url_part = dir_name + '/%d/%d/' % (today.year, today.month)
    dir_name = os.path.join(dir_name, str(today.year), str(today.month))
    print("*********", os.path.join(settings.MEDIA_ROOT, dir_name))
    if not os.path.exists(os.path.join(settings.MEDIA_ROOT, dir_name)):
        os.makedirs(os.path.join(settings.MEDIA_ROOT, dir_name))
    return dir_name,url_part


# 图片上传
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, url_part = upload_generation_dir(dir_name)
    path = os.path.join(settings.MEDIA_ROOT, relative_path_file)
    print("&&&&path", path)
    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 + url_part +file_name
    open(path_file, 'wb').write(files.file.read())
    return {"error": 0, "url": file_url}

文件保存后,路径为

4.3:使用django配置/upload来显示图片。

from django.views.static import serve

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

4.4:setting增加media的配置

MEDIA_URL = "/upload/"
MEDIA_ROOT = os.path.join(BASE_DIR, "upload")

参考文章
http://www.cnblogs.com/wupeiqi/articles/6307554.html
https://www.cnblogs.com/yangshl/p/6505308.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python Django富文本编辑器可以通过使用第三方库和插件来实现上传功能。常用的方法是使用django-ckeditor库或django-tinymce库来集成富文本编辑器以及上传功能。 首先,在Django项目安装所需的库,可以通过在终端运行以下命令安装库: ```python pip install django-ckeditor pip install django-tinymce ``` 安装完成后,需要在Django的设置文件进行相应的配置。对于django-ckeditor库,需要将以下内容添加到settings.py的INSTALLED_APPS和STATIC_URL: ```python INSTALLED_APPS = [ ... 'ckeditor', ] STATIC_URL = '/static/' STATICFILES_DIRS = [ ... os.path.join(BASE_DIR, 'static') ] ``` 对于django-tinymce库,需要将以下内容添加到settings.py的INSTALLED_APPS和STATIC_URL: ```python INSTALLED_APPS = [ ... 'tinymce', ] STATIC_URL = '/static/' STATICFILES_DIRS = [ ... os.path.join(BASE_DIR, 'static') ] ``` 然后,需要在urls.py文件添加相应的URL配置。对于django-ckeditor库,可以添加以下代码: ```python from django.contrib import admin from django.urls import include, path from django.conf import settings from django.conf.urls.static import static from ckeditor_uploader import views as ckeditor_views urlpatterns = [ ... path('ckeditor/', include('ckeditor_uploader.urls')), path('admin/', admin.site.urls), ] if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ``` 对于django-tinymce库,可以添加以下代码: ```python from django.contrib import admin from django.urls import include, path from django.conf import settings from django.conf.urls.static import static from tinymce import views as tinymce_views urlpatterns = [ ... path('tinymce/', include('tinymce.urls')), path('admin/', admin.site.urls), ] if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ``` 最后,还需要进行一些前端和后端的配置。具体可以参考文档或库的使用说明来实现上传功能。 以上就是使用Python Django富文本编辑器实现上传功能的简要步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值