程序员的资源宝库

网站首页 > gitee 正文

django集成markdown

sanyeah 2024-04-09 20:03:01 gitee 13 ℃ 0 评论

最近开发完Django blog的基本功能, 想在后台中集成markdown富文本编辑. 以下是开发流程

mdeditor的使用

经过大致的比对, 最终选择了django-mdeditor这个库.Django-mdeditor 是基于editor.md 的一个 django Markdown 文本编辑插件应用, 支持Editor.md的大部分功能, 这里只做简单的基本功能配置

基本配置使用

  • 安装
pip install django-mdeditor
  • setting设置
    在setting.py的INSTALLED_APPS 中添加
INSTALLED_APPS = [
        ...
        'mdeditor',
    ]
  • urls配置
    在项目的总urls.py中添加

path('mdeditor/', include('mdeditor.urls'))
  • 同步
python manage.py makemigrations
python manage.py migrate

到这步基本的设置就完成了, 在后台编辑博客可以看到的界面如下:

后端生成html文本

在后台书写完成的博客, 需要在前端页面中展示. 将markdown生成对应的html页面的插件也很多. 这里选用mistune

  • 自定义render
    为了便于识别语言简写, 需要对mistune原本的render做一定的修改, 直接在view中继承Renderer即可

class CustomerRender(mistune.Renderer):
    def block_code(self, code, lang=None):
        """Rendering block level code. ``pre > code``.

        :param code: text content of the code block.
        :param lang: language of the given code.
        """
        code = code.rstrip('\n')
        lang_dic = {
            'py': 'python',
            'js': 'javascript',
        }
        if not lang:
            code = escape(code, smart_amp=False)
            return '<pre><code>%s\n</code></pre>\n' % code
        code = escape(code, quote=True, smart_amp=False)
        return '<pre><code class="%s">%s\n</code></pre>\n' % (lang_dic.get(lang, lang), code)

以上代码中可以自己定义lang_dic.

这里这样处理是为了方便前端使用highlight.js高亮代码块

  • 完成转换
blog_content = mistune.markdown(blog.content)

前端使用highlight.js高亮代码块

在head头引入相关文件

<link rel="stylesheet" href="{% static 'js/styles/rainbow.css' %}">
<script src="{% static 'js/highlight.pack.js' %}"></script>
<script>hljs.initHighlightingOnLoad();</script>

现在前端也能正常显示了.

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表