1. 程式人生 > >python django 新增markdown格式

python django 新增markdown格式

使用django model的text格式去寫blog會有很多侷限的地方,所以新增markdown去展示會方便很多。

當時使用的django_markdown,過濾的時候對程式碼解析有問題,然後找了資料實現了,紀錄下。

在app層新建一個templatetags目錄,新增以下內容的檔案,姑且叫custom_markdown.py

from django import template                                                         
from django.template.defaultfilters import stringfilter                             
from django.utils.encoding import force_text                                        
from django.utils.safestring import mark_safe                                       
                                                                                    
register = template.Library()  #自定義filter時必須加上                              
                                                                                    
@register.filter(is_safe=True)  #註冊template filter                                
@stringfilter  #希望字串作為引數                                                  
def custom_markdown(value):                                                         
    return mark_safe(markdown.markdown(                                             
        value,                                                                      
        extensions=['markdown.extensions.fenced_code',                              
                    'markdown.extensions.codehilite'],                              
        safe_mode=True,                                                             
        enable_attributes=False))                                                                                                                                                                     

路由需要加上markdown的路徑

url(r'^markdown/', include('django_markdown.urls')),                            

對應模版層引用:

{% extends "base.html" %}                                                                                                                                     
{% load custom_markdown %}
 
{% block custom_styles %}
<link href="/static/blog/css/monokai.css" rel="stylesheet"> #對markdown做高亮處理
{% endblock %}
 
{% block title %}
{{ article.title }}
{% endblock title %}
 
 
{% block content %}
<h1>{{ article.title }}</h1>
<div id="main">
    {{ article.content | custom_markdown }}
</div>

但是markdown本身並沒有自帶高亮,所以看起來還是有點醜的,需要去加css檔案對markdown程式碼做高亮處理

這裡有一個開源markdown的css庫:pygments-css

隨便挑一個將其儲存在static裡引用到文章的頁面即可。