渲染markdown
安装包markdown2
使用markdown2.markdown函数将markdown语句转换为HTML
渲染LaTeX
在HTML网页的head部分加入以下语句
<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: true //关闭右击菜单显示
}
});
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
</script>
<script src="//cdn.bootcss.com/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="dns-prefetch" href="//cdn.mathjax.org" />
对公式进行特殊处理
如果只完成了以上两步,会发现公式并不能正确显示,这是因为公式里面有一些特殊字符会被markdown错误识别,可以在公式两侧加入<p>
段落标记,这样就不会被markdown处理了。
def change_formula(matched):
formula = matched.group(0)
formula = formula.replace('_', ' _')
return '\n<p>'+formula+'</p>\n'
def detail(request, pk):
# 不存在时返回404错误
paper = get_object_or_404(Paper, pk=pk)
# 用于识别公式的正则表达式
paper.review = markdown2.markdown(re.sub(r'\$\$(.+?)\$\$', change_formula, paper.review))
return render(request, 'papers/detail.html', context={
'paper': paper})