Django项目使用ckeditor详解(不使用admin)


Posted in Python onDecember 17, 2019

效果图:

Django项目使用ckeditor详解(不使用admin)

1.安装django-ckeditor

pip install django-ckeditor

如果需要上传图片或者文件,还需要安装pillow

pip install pillow

2.配置模型字段

如果编辑器需要上传图片或者文件,需要引入RichTextUploadingField,否则只需要引入RichTextField

from ckeditor_uploader.fields import RichTextUploadingField

class Activity(models.Model):
  desc = RichTextUploadingField(verbose_name="活动描述")

3.settings中配置

CKEDITOR_CONFIGS = {
  'default': {
    'toolbar': 'full', #工具栏全部功能
    'height': 300, # 高度
    'width': 730, # 宽度
  },
}
CKEDITOR_UPLOAD_PATH = 'ckeditor/' #上传文件的目录
CKEDITOR_IMAGE_BACKEND = 'pillow'  #pillow做为backend

4.form表单配置

这里只需要使用modelForm,不需要配置

from django import forms

from learntime.activity.models import Activity

class ActivityForm(forms.ModelForm):
  class Meta:
    fields = "__all__" #引入全部字段
    model = Activity

5.urls配置

以下是admin中配置的urls,如果在自己的项目中就不能这样写

urlpatterns = [
  ...
  path('ckeditor/', include('ckeditor_uploader.ckeditor_urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

网上其他教程都是在admin中配置ckeditor,如果按照如上代码可能会发现图片上传失败,点进源码可以看到,图片上传的成功条件为:django的用户表is_staff为True,自己的项目中可能并没有这样设定。

urls源码如下:

from __future__ import absolute_import

from django.conf.urls import url
from django.contrib.admin.views.decorators import staff_member_required
from django.views.decorators.cache import never_cache

from . import views

urlpatterns = [
  url(r'^upload/', staff_member_required(views.upload), name='ckeditor_upload'),
  url(r'^browse/', never_cache(staff_member_required(views.browse)), name='ckeditor_browse'),
]

staff_member_required为装饰器,我们可以把它替换为login_required,即必须登录之后才能上传图片。

修改后的代码如下:

xxx.utils.ckeditor_urls.py

from __future__ import absolute_import

from django.conf.urls import url
from django.contrib.auth.decorators import login_required
from django.views.decorators.cache import never_cache

from ckeditor_uploader import views

urlpatterns = [
  url(r'^upload/', login_required(views.upload), name='ckeditor_upload'),
  url(r'^browse/', never_cache(login_required(views.browse)), name='ckeditor_browse'),
]

urls.py

path('ckeditor/', include('xxx.utils.ckeditor_urls')),

按照如上配置就能完美上传图片和文件了。

Django项目使用ckeditor详解(不使用admin)

以上这篇Django项目使用ckeditor详解(不使用admin)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Django小白教程之Django用户注册与登录
Apr 22 Python
Python中的os.path路径模块中的操作方法总结
Jul 07 Python
requests和lxml实现爬虫的方法
Jun 11 Python
致Python初学者 Anaconda入门使用指南完整版
Apr 05 Python
python实现自动发送报警监控邮件
Jun 21 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
Nov 07 Python
python 反编译exe文件为py文件的实例代码
Jun 27 Python
python实现上传文件到linux指定目录的方法
Jan 03 Python
如何学习Python time模块
Jun 03 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
Jun 11 Python
一些关于python 装饰器的个人理解
Aug 31 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
Jan 30 Python
python主线程与子线程的结束顺序实例解析
Dec 17 #Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 #Python
Django集成celery发送异步邮件实例
Dec 17 #Python
python学生信息管理系统实现代码
Dec 17 #Python
pymysql模块的操作实例
Dec 17 #Python
Django异步任务线程池实现原理
Dec 17 #Python
python 求10个数的平均数实例
Dec 16 #Python
You might like
一个简单且很好用的php分页类
2013/10/26 PHP
PHP中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
php实现zip文件解压操作
2015/11/03 PHP
微信自定义分享php代码分析
2016/11/24 PHP
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
js获取IP地址的方法小结
2014/07/01 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
Angular实现表单验证功能
2017/11/13 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
vue实现计算器功能
2020/02/22 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
Python发送以整个文件夹的内容为附件的邮件的教程
2015/05/06 Python
Python中subprocess模块用法实例详解
2015/05/20 Python
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
python读取配置文件方式(ini、yaml、xml)
2020/04/09 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
No7 Beauty美国官网:英国国民护肤品牌
2019/10/31 全球购物
怎样创建、运行java程序
2014/08/01 面试题
Java基础知识面试题
2014/03/25 面试题
计算机软件专业求职信
2014/06/10 职场文书
市场策划求职信
2014/08/07 职场文书
2019公司管理制度
2019/04/19 职场文书
python opencv通过按键采集图片源码
2021/05/20 Python
asyncio异步编程之Task对象详解
2022/03/13 Python