Django2.0中使用MrakDown編輯器並在前端顯示
Django2.0中使用MrakDown編輯器並在前端顯示
前言
在使用Django
的過程中,有一個使用文字編輯器的需求,原本使用的是富文字編輯器django-ckeditor
但是它不是MarkDown
編輯器,經過一翻尋找我找到了Editor.Md
這個專案,這是一款優秀的MrakDown
編輯器,並且有人貼心得把它移植到了Django
上,下面我記載一下使用方法
本文所用的作業系統為
Deepin 15.8
Python版本:
Python 3.6.5
Django版本:2.0
新增編輯器到後臺
首先我們需要安裝編輯器,這個編輯器在GitHub
的地址是:
-
安裝
django-mdeditor
:sudo pip3 install django-mdeditor
-
然後在專案目錄的
settings.py
加入:INSTALLED_APPS = [ ... 'mdeditor', ]
-
新增媒體路徑到設定中:
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads') MEDIA_URL = '/media/'
-
在專案的
urls.py
中加入:from django.contrib import admin from django.
-
新增一個部落格
APP
:此過程不表,假設你已經建立好一個部落格app,並且在
admin.py
註冊了model
,在models.py
中新增:from django.db import models from mdeditor.fields import MDTextField class Blog(models.Model, ReadNumExpandMethod): title = models.CharField(max_length=50) content = MDTextField() # 型別為編輯器提供的欄位
然後執行:
python3 manage.py makemigrations python3 manage.py migrate
此時開啟我們的後臺,應該已經可以看到效果了:
前端渲染
此時,後臺雖然已經有了MarkDown
編輯器,但是在前端並沒有展示出來,我們需要用一些方法在前端顯示.
首先需要安裝一個第三方庫:
pip3 install markdown
此時我們已經在models.py
裡面註冊了這個子段,我們需要在views.py
中顯示出來,我是返回了一個字典,讀者可以根據自己的需要,找到具體的內容,呼叫markdown
方法來解析成html返回給前端:
blog/views.py
import markdown
from django.shortcuts import render_to_response, get_object_or_404
def blog_detail(request, blog_pk): # 部落格內容
context = {}
context['blog'] = get_object_or_404(Blog, id=blog_pk)
context['blog'].content = markdown.markdown(context['blog'].content,
extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
'markdown.extensions.toc',
])
response = render_to_response("blog/blog_detail.html", context)
return response
這樣我們在模板中展示 {{ blog.content }}
的時候,就不再是原始的 Markdown
文字了,而是渲染過後的 HTML 文字。注意這裡我們給 markdown
渲染函式傳遞了額外的引數 extensions
,它是對 Markdown
語法的拓展,這裡我們使用了三個拓展,分別是 extra、codehilite、toc
。extra 本身包含很多拓展,而 codehilite 是語法高亮拓展,這為我們後面的實現程式碼高亮功能提供基礎.
在前端呼叫的時候,此時支援顯示純粹的html
程式碼,我們需要在前端解析html
,可以這樣:
在對應模型標籤中填入{{ blog.content|safe }}
即可.
此時效果為:
接下來有程式碼高亮的環節,這些內容不在本文討論範圍之內,請自行搜尋.