django的文本编辑样式

接下来主要讲两个编辑器,一个是富文本编辑器,另一个是Markdown文本编辑器

Markdown文本编辑器

  1. 首先安装django-mdeditor编辑器
pip install django-mdeditor
  1. 然后在settings.py中将mdeidtor进行注册
'mdeditor',
  1. 将下面代码放入到urls.py的底部,用于指定图片传送的地方
from django.conf.urls.static import static
from django.conf import settings

if settings.DEBUG:
    # static files (images, css, javascript, etc.)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  1. 在Model中使用mdeditor
from mdeditor.fields import MDTextField

context = MDTextField("文章内容")
  1. 在文章详情页中如何将Markdown渲染成正常的文本
import markdown

context = markdown.markdown(Article, extensions=[
                        'markdown.extensions.extra',
                        # 语法高亮扩展
                        'markdown.extensions.codehilite',
                        'markdown.extensions.toc',
                    ])
  1. 设置代码语法高亮
    首先需要安装Pygments进行将文档的内容进行渲染
pip install Pygments

然后生成css文件,然后在HTML页面中引用生成的css文件
首先进入/static/文件夹下,运行以下的命令生成css文件

pygmentize -S monokai -f html -a .codehilite > monokai.css

最后在需要使用markdown的页面中引用css文件即可

<!-- 引入markdwon的高亮语法 -->
<link rel="stylesheet" href="{% static 'css/monokai.css' %}">

富文本编辑器

  1. 我们首先选择ckeditor作为我们的富文本编辑器
    安装:
pip install django-ckeditor
  1. settings.py中进行注册
INSTALLED_APPS   = {
    ......
    'ckeditor',    
}
  1. models.py中引用RichTextField
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
  1. 然后进行数据迁移
python manage.py makemigrations
python manage.py migrate
  1. 在编辑状态显示多样编辑工具
    首先需要在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',
    }
}

然后我们在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
  1. 上传文件
    1) 将ckeditor_uploader加入到settings.py
INSTALLED_APPS = [
    # ...
    'ckeditor',
    'ckeditor_uploader',
]

使用上传功能,需要设置上传位置。该文件是上传到media目录,所以也需要设置media。打开settings.py添加如下设置:

MEDIA_URL = '/media/'
# 放在django项目根目录,同时也需要创建media文件夹
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
 
CKEDITOR_UPLOAD_PATH = 'upload/'
  1. 配置上传url和media的访问
    上传功能需要有地址可以请求,需要需要提供上传的url。打开全局的urls.py,添加设置到urlpatterns中:
path('ckeditor/', include('ckeditor_uploader.urls')),

另外,上传的图片是到media中,不是在static中。我们还需要设置media可被访问,如下设置可用于开发中使用,若部署到服务器可用服务器软件设置:

from django.conf import settings
from django.conf.urls.static import static
 
 
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

3)修改model
上面的RichTextField不可用于上传文件,需要修改model如下:

from django.db import models
from ckeditor_uploader.fields import RichTextUploadingField
 
 
class Blog(models.Model):
    title = models.CharField(max_length=50)
    content = RichTextUploadingField()

更多的内容请见刘龙韬的博客