django的文本编辑样式
接下来主要讲两个编辑器,一个是富文本编辑器,另一个是Markdown文本编辑器
Markdown文本编辑器
- 首先安装
django-mdeditor
编辑器
pip install django-mdeditor
- 然后在
settings.py
中将mdeidtor进行注册
'mdeditor',
- 将下面代码放入到
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)
- 在Model中使用mdeditor
from mdeditor.fields import MDTextField
context = MDTextField("文章内容")
- 在文章详情页中如何将Markdown渲染成正常的文本
import markdown
context = markdown.markdown(Article, extensions=[
'markdown.extensions.extra',
# 语法高亮扩展
'markdown.extensions.codehilite',
'markdown.extensions.toc',
])
- 设置代码语法高亮
首先需要安装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' %}">
富文本编辑器
- 我们首先选择
ckeditor
作为我们的富文本编辑器
安装:
pip install django-ckeditor
- 在
settings.py
中进行注册
INSTALLED_APPS = {
......
'ckeditor',
}
- 在
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
- 然后进行数据迁移
python manage.py makemigrations
python manage.py migrate
- 在编辑状态显示多样编辑工具
首先需要在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) 将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/'
- 配置上传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()
更多的内容请见刘龙韬的博客