文章内容使用django-ckeditor

1)安装django-ckeditor

  1. pip install django-ckeditor
    pip install Pillow

2)在settings.py的INSTALLED_APPS里添加ckeditor和ckeditor_uploader两个应用

  1. INSTALLED_APPS = (
  2. ...
  3. 'ckeditor',
  4. 'ckeditor_uploader'
  5. )

3)同时需要在settings.py里设置ckeditor的文件上传路径等配置:

  1. ...
    STATIC_URL = '/static/'
  2. STATIC_ROOT = ''
  3. # media_confige
  4. MEDIA_URL = '/media/'
  5. MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  6. CKEDITOR_UPLOAD_PATH = 'article_files/'
  7. CKEDITOR_JQUERY_URL = 'js/jquery-3.2.1.min.js'
  8. CKEDITOR_IMAGE_BACKEND = 'pillow'
  9. CKEDITOR_CONFIGS = {
  10. 'default': {
  11. 'language': 'zh-cn',
  12. 'toolbar_YourCustomToolbarConfig': [
  13. {'name': 'clipboard', 'items': ['Undo', 'Redo', '-', 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord']},
  14. {'name': 'paragraph',
  15. 'items': ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote']},
  16. {'name': 'insert', 'items': ['Image', 'Table', 'HorizontalRule', 'Smiley']},
  17. {'name': 'links', 'items': ['Link', 'Unlink', 'Anchor']},
  18. {'name': 'editing', 'items': ['Find', 'Replace', '-']},
  19. {'name': 'tools', 'items': ['Maximize']},
  20. '/',
  21. {'name': 'styles', 'items': ['Format', 'Font', 'FontSize']},
  22. {'name': 'basicstyles',
  23. 'items': ['Bold', 'Italic', 'Underline', 'Strike', '-', 'RemoveFormat']},
  24. {'name': 'colors', 'items': ['TextColor', 'BGColor']},
  25. {'name': 'paragraph',
  26. 'items': ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock']},
  27. {'name': 'document', 'items': ['Source']},
  28. ],
  29. 'toolbar': 'YourCustomToolbarConfig', # put selected toolbar config here
  30. 'width': '100%',
  31. 'cols': '',
  32. 'rows': '',
  33. 'tabSpaces': 4,
  34. 'extraPlugins': ','.join([
  35. 'uploadimage', # the upload image feature
  36. # your extra plugins here
  37. 'div',
  38. 'autolink',
  39. 'autoembed',
  40. 'embedsemantic',
  41. 'autogrow',
  42. 'widget',
  43. 'lineutils',
  44. 'clipboard',
  45. 'dialog',
  46. 'dialogui',
  47. 'elementspath'
  48. ]),
  49. }
  50. }
  51. CKEDITOR_ALLOW_NONIMAGE_FILES = False
  52. CKEDITOR_BROWSE_SHOW_DIRS = True

4)修改urls.py

  1. url(r'^ckeditor/', include('ckeditor_uploader.urls')),

5)最后修改需要使用富文本编辑器的Django APP的目录下的models.py

  1. # coding:utf-8
  2. ...#from ckeditor.fields import RichTextField
  3. from ckeditor_uploader.fields import RichTextUploadingField
  4. from django.utils.encoding import python_2_unicode_compatible
  5. # """
  6. # 文章实体
  7. # """
  8. @python_2_unicode_compatible
  9. class Post(models.Model):
  10. ...
  11. body = RichTextUploadingField(verbose_name=u'内容') # 文章内容,较长因此定义为TextField, type=models.TextField
  12. ...

备注:

ckeditor的CKEDITOR_CONFIGS就是一个Python的dict,可以同时运用多种ckeditor的配置并命名。

  1. CKEDITOR_CONFIGS = {
  2. 'awesome_ckeditor': {
  3. 'toolbar': 'Basic',
  4. },
  5. 'default_ckeditor':{
  6. 'toolbar': 'Full',
  7. },
  8. }

这样在models.py中就可以通过RichTextField的config_name进行选择。

  1. learn = RichTextField(config_name='default_ckeditor')
  2. instructions = RichTextField(config_name='awesome_ckeditor')

文章简介使用django-tinymce

1)安装django-tinymce插件:

  1. pip install django-tinymce

2)在settings.py的INSTALLED_APPS里添加tinymce应用

  1. INSTALLED_APPS = [
  2. ...
  3. 'tinymce',
  4. ]

3)修改urls.py

  1. url(r'^tinymce/', include('tinymce.urls')),

4)修改models.py

  1. # coding:utf-8
  2. ...
  3. from tinymce.models import HTMLField
  4. ...
  5. from django.utils.encoding import python_2_unicode_compatible
  6.  
  7. # """
  8. # 文章实体
  9. # """
  10. @python_2_unicode_compatible
  11. class Post(models.Model):
  12. ...
  13. summary = HTMLField(verbose_name=u'简介', max_length=256, blank=True) # 文章简介,定义最大长度为126。, type=models.CharField
  14. ...

最终效果:

Django(博客系统):文章内容使用django-ckeditor、文章简介使用django-tinymce的更多相关文章

  1. web开发-Django博客系统

    项目界面图片预览 项目代码github地址 项目完整流程 项目流程: 1 搞清楚需求(产品经理) (1) 基于用户认证组件和Ajax实现登录验证(图片验证码) (2) 基于forms组件和Ajax实现 ...

  2. Django(博客系统):按照时间分层筛选“/blog/article/?create_time__year=2017”,出现问题:Database returned an invalid datetime value. Are time zone definitions for your database installed?

    问题背景 添加文章时间没问题,但为了设定博客文章按照时间分层筛选(创建时间的年份.年月&月份来搜索文章),我在blog这个django app的admin.py的ArticleAdmin类中做 ...

  3. Django(博客系统):重写了auth.User后使用createsupperuser出错解决办法

    背景:重写django的系统User后,使用createsupperuser创建用户失败 由于项目需要扩展django默认新的auth.User系统(添加两个字段:头像.简介等字段),因此就重写了dj ...

  4. Django博客系统

    零.创建项目及配置 一.编写 Model 层的代码 二.配置 admin 页面 三.根据需求定制 admin

  5. Django 博客开发教程目录索引

    Django 博客开发教程目录索引 本项目适合 0 基础的 Django 开发新人. 项目演示地址:Black & White,代码 GitHub 仓库地址:zmrenwu/django-bl ...

  6. Asp.net博客系统收集和简单介绍

    国内Asp.net博客系统收集和简单介绍       [转载文章,仅供个人参考,引自http://www.soyaoo.com/Blog/post/92.html] 1.ZJ-Blog程序简介:基于A ...

  7. 【django之博客系统开发】

    一.项目简介 使用django开发一套博客系统,参考博客园. 需求如下: 项目结构: 二.全部代码 from django.db import models # Create your models ...

  8. django初探-创建简单的博客系统

    django第一步 1. django安装 pip install django print(django.get_version()) 查看django版本 2. 创建项目 打开cmd,进入指定目录 ...

  9. django初探-创建简单的博客系统(二)

    上篇django初探-创建简单的博客系统(一)已经记录了Django实现博客的发布的整个过程,接下来继续说明博客标题和内容的显示. 显示博客详细 将博客内容保存到数据库还不是发布博客的终极目的,博客一 ...

随机推荐

  1. Java基础知识回顾之二 ----- 修饰符和String

    前言 在上一篇中,回顾了Java的基本数据类型 ,这篇就来回顾下Java中的一些修饰符以及String. 修饰符介绍 Java修饰符主要分为两类: 访问修饰符 非访问修饰符 其中访问修饰符主要包括 p ...

  2. 用JNDI连接数据库

    之前说到了利用Java中的Properties类读取properties配置文件,连接数据库,现在说另一种方法,他们的目的和作用都是一样的,都是为了提高代码的复用性,解决了更改数据库 时还要更改代码的 ...

  3. Maven-11: 从命令行调用插件

    mvn -h显示mvn命令帮助: usage: mvn [options] [<goal(s)>] [<phase(s)>] Options: -am,--also-make ...

  4. 变量对象VO与活动对象AO

    变量对象VO 变量对象VO是与执行上下文相关的特殊对象,用来存储上下文的函数声明,函数形参和变量.在global全局上下文中,变量对象也是全局对象自身,在函数上下文中,变量对象被表示为活动对象AO. ...

  5. 【Python】 闭包&装饰器

    python中的函数本身就是对象,所以可以作为参数拿来传递.同时其允许函数的层级嵌套定义,使得灵活性大大增加. 闭包 闭包的定义:将函数的语句块与其运行所需要的环境打包到一起,得到的就是闭包对象.比如 ...

  6. nginx域名跳转技巧

    1.地址重写:访问server_name的时候跳转到http://www.cnblogs.com/qinyujie/ 修改nginx配置文件.加入到server{...}字段或者location字段里 ...

  7. Konckout第五个实例:各种事件绑定

    点击加一: <!doctype html> <html > <head> <meta http-equiv="Content-Type" ...

  8. CSS 语法

    CSS 语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明: 选择器通常是您需要改变样式的 HTML 元素. 每条声明由一个属性和一个值组成. 属性(property)是您希望设置的样 ...

  9. Java虚拟机之GC

    ⑴背景 Java堆和方法区实现类所需内存是不一样的,每个方法的多分支需要的内存也可能不一样,我们只有在运行期间才能制动创建哪些对象.这部分内存分配与回收都是动态的,而垃圾回收器所关注的就是这些这部分内 ...

  10. Redux----Regular的Redux实现整理

      Regular的Redux实现整理 什么问题? 组件的树形结构决定了数据的流向,导致的数据传递黑洞 怎么解决? 所有组件都通过中介者传递共享数据 方案: 中介者: (function create ...