最近打算把网站嵌入一个markdown编辑器,当然还没有完成,等完成以后再接着更新一波,或者感觉不需要了就不更新了。
django中整合markdown
python
中有一个markdown
模块,直接可用
pip install markdown
然后在views.py
中
from markdown import markdown
def add_page(request):
page.body=markdown(page.body,
extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
'markdown.extensions.toc',
])
page.save()
这样就可以把markdown
转化成html
了。
代码高亮,安装一个pygments
就行了。
其实这些都没啥问题,主要是我前端遇到了一点问题,如果我把{{ body }}
直接传入我的page.html
模板,那这个时候django
把我的{{ body }}
转义成了字符串插了进去,这个时候不能正常显示。
这个时候有两种方法:
jquery
中的ajax
来搞,当网页加载时,异步从后台读取{{ body }}
内容,加载原来的地方,因为我们知道jquery
可以直接输出html
safe
标签来完成,即只需要在page.html
模板中添加{{ body|safe }}
即可,这句话告诉django
我的内容是安全的,你不需要做任何操作。前端整合MathJax
这个相比而言就比较简单了,只需要将下面的代码加入到base.html
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
showProcessingMessages: false, //关闭js加载过程信息
messageStyle: "none", //不显示信息
extensions: ["tex2jax.js"],
jax: ["input/TeX", "output/HTML-CSS"],
tex2jax: {
inlineMath: [ ["$", "$"] ], //行内公式选择$
displayMath: [ ["$$","$$"] ], //段内公式选择$$
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre','code','a'], //避开某些标签
ignoreClass:"comment-content" //避开含该Class的标签
},
"HTML-CSS": {
availableFonts: ["STIX","TeX"], //可选字体
showMathMenu: false //关闭右击菜单显示
}
});
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
</script>
<script src="//cdn.bootcss.com/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
再在base.html
中加入外链接
<link rel="dns-prefetch" href="//cdn.mathjax.org" />
这个时候差不多就可以通过一个text的编辑器编辑Markdown+MathJax
了。但是因为我们的程序流程是:
markdown
将输入markdown
的语法转变为html
html
通过mathjax.js
渲染。所以,如果我们公式中有*
或者>
之类markdown
的特殊字符时,我们公式显示就会出错。这个时候我们在编辑文本的时候,可以先将这些字符转义*
变成\*
,>
变成\>
。