Django + django-ckeditor 富文本编辑器

Django + django-ckeditor富文本编辑器

富文本编辑器提供了类似 Microsoft Word 的编辑功能,即使不会编写 html 代码的用户也可以设置各种文本格式

django-ckeditor

  • 安装
$ pip install django-ckeditor
  • 注册
# settings.py
...
# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
    # 将 django-ckeditor 注册到该列表中
    'ckeditor',
]
  • 创建模型

 在 models.py 中导入 RichTextField

# blog/models.py
from django.db import models
from ckeditor.fields import RichTextField

# 博客模型
class Blog(models.Model):
    title = models.CharField(max_length=254, unique=True)
    # 博客的内容为 RichTextField 对象
    body = RichTextField()

    def __str__(self):
        return self.title
  • 数据库迁移
     模型代码完成之后进行数据库迁移
$ python manage.py makemigrations
$ python manage.py migrate
  • 注册该模型使其在后台显示
# blog/admin.py
from django.contrib import admin
from .models import Blog

#注册该模型
@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):
    # 列表页面显示字段
    list_display = ['title', 'body']

  • 在后台使用富文本编辑器编写文章

 打开 http://127.0.0.1:8000/admin 进入后台

image

 在 Blog 一栏点击 Add 按钮添加博客文章

image

可以看到,文章的 body 部分已经替换成一个富文本编辑框了

 之所以显示成英文,是因为 django 的默认语言就是英文,只需要在配置文件 settings.py 中修改一下设置就好了

# settings.py
...
LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'
...
image

定制

 默认只有一行工具,虽然一般情况下可以满足用户的需要,但有时也会需要用到其他的功能,这个时候就需要自己进行配置

image
  • 插件(这里以插入代码片段为例)

 作为一名程序员,在写博客的时候免不了要插入一些代码片段,所以就需要插入的代码在前端根据不同的编程语言显示出不同的格式。

 这个功能插件默认是不再工具栏显示的,但是是已经存在的,存放在 ...\Lib\site-packages\ckeditor\static\ckeditor\ckeditor\plugins\ 目录中,名称是 codesinppet

  • 配置

 在 settings.py 中添加自己的 ckeditor 配置,如下

# settings.py
...
# ckeditor
CKEDITOR_CONFIGS = {
    # 将这份配置命名为 my_config
    'my_config': {
        'skin': 'moono-lisa',
        'toolbar_Basic': [
            ['Source', '-', 'Bold', 'Italic']
        ],
        'toolbar_Full': [
            ['Styles', 'Format', 'Bold', 'Italic', 'Underline', 'Strike', 'SpellChecker', 'Undo', 'Redo'],
            ['Link', 'Unlink', 'Anchor'],
            ['Image', 'Flash', 'Table', 'HorizontalRule'],
            ['TextColor', 'BGColor'],
            ['Smiley', 'SpecialChar'],
            # 在工具栏中添加该功能的按钮
            ['CodeSnippet'], ['Source'],

        ],
        'toolbar': 'Full',
        'height': 291,
        'width': 835,
        'filebrowserWindowWidth': 940,
        'filebrowserWindowHeight': 725,
        # 添加的插件
        'extraPlugins': 'codesnippet',
    }
}
...

 添加好新的配置,只需要在初始化时添加参数 config_name 引用改配置就可以了

# blog/models.py
...
class Blog(models.Model):
    title = models.CharField(max_length=254, unique=True)
    # 添加参数 config_name 指定使用的配置
    body = RichTextField(config_name='my_config')

    def __str__(self):
        return self.title

修改后必须重启服务器才会生效

image
  • 更多

 如果需要其他功能插件,只需要按照前面的办法就可添加,而 django-ckeditor 没有自带的,只需要在网上把插件下载到 ckeditor\static\ckeditor\ckeditor\plugins\ 目录中,再进行配置即可。

图片上传的问题

  默认情况下,ckeditor 是不能图片上传,而我个人也是觉得没有必要添加这个功能,直接引用链接显示就可以了,毕竟服务器也是贼贵,没必要再弄一个来存放上传的图片,除非是刚需。

 所有这里不会再讲这部分内容,想看的话可以移步这里

代码高亮

 在后台管理页面中,编辑器中的代码块已经有高亮效果了,然而在普通页面中显示却没有效果。这是因为编辑器已经默认引用了 highlight.js 库,而在普通页面中,只需要手动添加 highlight.js 就可以使代码达到高亮的效果。代码如下:

...
    <link rel="stylesheet" href="/static/css/googlecode.css">
    <script src="/static/js/highlight.pack.js"></script>
    <script>hljs.initHighlightingOnLoad();</script>
...
solarized_dark
  • googlecode.css 是 google 风格高亮效果的样式文件,也可以选择其他的比如默认的 default.css 或者 solarized_dark.css 等等,在 highlight.js demo
    中可以看到具体的效果,而这些文件可以在 “...\Lib\site-packages\ckeditor\static\ckeditor\ckeditor\plugins\codesnippet\lib\highlight\styles” 目录中找到(没有的话就在下面的链接中去下载)。
  • highlight.pack.js 就是需要引用的 js 库(可在“...\Lib\site-packages\ckeditor\static\ckeditor\ckeditor\plugins\codesnippet\lib\highlight”目录中找到,也可以直接下载)
  • 通过 hljs.initHighlightingOnLoad() 进行调用
  • document page ,download page
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容