Django 之 文本编辑器

烈酒焚心 提交于 2019-11-27 07:23:19

# django的文本编辑样式

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

## Markdown文本编辑器

1. 首先安装`django-mdeditor`编辑器
    ```
    pip install django-mdeditor
    ```
2. 然后在`settings.py`中将mdeidtor进行注册
    ```
    'mdeditor',
    ```
3. 将下面代码放入到`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)
    ```
4. 在Model中使用mdeditor
    ```python
    from mdeditor.fields import MDTextField

    context = MDTextField("文章内容")
    ```
    
5. 在文章详情页中如何将Markdown渲染成正常的文本
    ```
    import markdown
    
    context = markdown.markdown(Article, extensions=[
                            'markdown.extensions.extra',
                            # 语法高亮扩展
                            'markdown.extensions.codehilite',
                            'markdown.extensions.toc',
                        ])
    ```
    
6. 设置代码语法高亮
    首先需要安装`Pygments`进行将文档的内容进行渲染
    ```
    pip install Pygments
    ```
    然后生成`css`文件,然后在HTML页面中引用生成的`css`文件          
    首先进入`/static/`文件夹下,运行以下的命令生成`css`文件
    ```
    pygmentize -S monokai -f html -a .codehilite > monokai.css
    ```
    最后在需要使用`markdown`的页面中引用css文件即可
    ```html
    <!-- 引入markdwon的高亮语法 -->
    <link rel="stylesheet" href="{% static 'css/monokai.css' %}">
    ```
    
## 富文本编辑器
1. 我们首先选择`ckeditor`作为我们的富文本编辑器     
    安装:
    ```
    pip install django-ckeditor
    ```
2. 在`settings.py`中进行注册
    ```
    INSTALLED_APPS   = {
        ......
        'ckeditor',    
    }
    
    ```

3. 在`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
    ```
    
4. 然后进行数据迁移
    ```
    python manage.py makemigrations
    python manage.py migrate
    ```
    
5. 在编辑状态显示多样编辑工具       
    首先需要在`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
    ```
6. 上传文件     
    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/'
    ```
    
    2) 配置上传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()
    ```
    

更多的内容可以到我的[我的博客](https://www.liulongtao.com)中查看
    
 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!