十 【用django2.0來開發】給django增加markdown文本編輯器
前面的文章一直都是在介紹django最常見的一些用法, 這一章放鬆一下, 學習一個django的小模塊
目的是如果大家以後在使用別的django的插件模塊或者編寫django的插件模塊時, 也和這個插件的方法是一樣的。
當時讓大家做的文章管理, 文章內容欄位只是一個普通的textarea框, 今天我們就把這個文本框變成一個markdown的富文本編輯器。
這個編輯器的GitHub地址:https://github.com/agusmakmun/django-markdown-editor
項目demo地址:
https://gitee.com/ccnv07/django_example安裝django-markdown-editor
pip install martor
載入到INSTALLED_APPS
# cms/settings.py
INSTALLED_APPS = [
....
martor,
]
添加url路由
# cms/urls.py
# django >= 2.0
urlpatterns = [
...
path(martor/, include(martor.urls)),
]
# django <= 1.9
urlpatterns = [
...
url(r^martor/, include(martor.urls)),
]
修改Django配置項以支持django-markdown-editor
# cms/settings.py
STATIC_URL = /static/
# STATICFILES_DIRS = (static, )
STATIC_ROOT = /static
MEDIA_URL = /media/
MEDIA_ROOT = BASE_DIR + /media
STATIC_ROOT
指定static的目錄
MEDIA_URL
是指定媒體資源訪問路徑, 因為我們上傳以後的文件需要通過這個路徑訪問, 所以必須指定
MEDIA_ROOT
指定媒體資源的路徑
注意!
MEDIA_URL 是需要在urls.py中指定訪問路徑的re_path(r^media/(?P<path>.*)$, serve, {document_root:settings.MEDIA_ROOT}),
遷移django-markdown-editor的靜態文件到項目的static中
python manage.py collectstatic
添加django-markdown-editor的配置到項目配置中
# cms/settings.py
# Global martor settings
# Input: string boolean, `true/false`
MARTOR_ENABLE_CONFIGS = {
imgur: true, # to enable/disable imgur/custom uploader.
mention: false, # to enable/disable mention
jquery: true, # to include/revoke jquery (require for admin default django)
living: false, # to enable/disable live updates in preview
}
# To setup the martor editor with label or not (default is False)
MARTOR_ENABLE_LABEL = False
# Imgur API Keys
MARTOR_IMGUR_CLIENT_ID = your-client-id
MARTOR_IMGUR_API_KEY = your-api-key
# Safe Mode
MARTOR_MARKDOWN_SAFE_MODE = True # default
# Markdownify
MARTOR_MARKDOWNIFY_FUNCTION = martor.utils.markdownify # default
MARTOR_MARKDOWNIFY_URL = /martor/markdownify/ # default
# Markdown extensions (default)
MARTOR_MARKDOWN_EXTENSIONS = [
markdown.extensions.extra,
markdown.extensions.nl2br,
markdown.extensions.smarty,
markdown.extensions.fenced_code,
# Custom markdown extensions.
martor.extensions.urlize,
martor.extensions.del_ins, # ~~strikethrough~~ and ++underscores++
martor.extensions.mention, # to parse markdown mention
martor.extensions.emoji, # to parse markdown emoji
martor.extensions.mdx_video, # to parse embed/iframe video
]
# Markdown Extensions Configs
MARTOR_MARKDOWN_EXTENSION_CONFIGS = {}
# Markdown urls
MARTOR_UPLOAD_URL = /martor/uploader/ # default
MARTOR_SEARCH_USERS_URL = /martor/search-user/ # default
# Markdown Extensions
MARTOR_MARKDOWN_BASE_EMOJI_URL = https://assets-cdn.github.com/images/icons/emoji/ # default
MARTOR_MARKDOWN_BASE_MENTION_URL = https://python.web.id/author/ # default (change this)
CSRF_COOKIE_HTTPONLY = False
使用django-markdown-editor
打開article/forms.py文件
# article/forms.py
from martor.fields import MartorFormField
class ArticleForm(forms.ModelForm):
...忽略代碼
content = MartorFormField()
然後打開訪問後臺查看效果