首頁 > 軟體

讓Markdown支援Django1.6及程式碼語法高亮

2020-06-16 17:55:48

Django專案升級到1.6後,發現django.contrib.markup已經被移除了,其實早在1.5就不推薦使用,標記為了deprecated.如果想讓的markdown語法能繼續正常使用的話,你可以自定義一個過濾器.

#my_markup.py
mport markdown

from django import template
from django.template.defaultfilters import stringfilter
from django.utils.encoding import force_unicode
from django.utils.safestring import mark_safe

register = template.Library()

@register.filter(is_safe=True)
@stringfilter
def my_markdown(value):
    extensions = ["nl2br", ]

    return mark_safe(markdown.markdown(force_unicode(value),
                                       extensions,
                                       safe_mode=True,
                                       enable_attributes=False))

儲存在app的templatetags目錄下面,在模板中載入就行了.

{% load my_markup %}
{{ value|my_markdown }}

--------------------------------------分割線 --------------------------------------

由於Django1.6預設不支援markdown了,所以需要自己寫過濾器。現在遇到一個新的麻煩是,程式碼塊預設情況下沒有任何高亮顯示,看起來非常的單調。因此今天研究了一番。

Pythonmarkdown模組功能很完善,亮點是它還能支援擴充套件外掛,CodeHilite就是用來做程式碼高亮擴充套件功能的。使用非常簡單,

def md1(value):
    extensions = ["nl2br", "codehilite"]
    return mark_safe(markdown.markdown(force_unicode(value),
                                   extensions,
                                   safe_mode=True,
                                   enable_attributes=False))

其實就是把codehilite加入到extensions列表中去就可以了,此時由markdown渲染後檔案的程式碼塊所在的div標籤會多了一個class屬性class="codehilite"。但是事情還沒完。程式碼還沒有真正加上高亮。真正的高亮功能是由Pygments來完成的。

因此還要安裝Pygments,安裝方式也非常簡單

pip install pygments

如果你人品和我一樣差的話,需要去 Bitbucket下載他的原始碼才能完成安裝。下載下來解壓執行:

python setup.py install

順利安裝完成後,還缺少一樣東西,既然是程式碼高亮的話,肯定是有CSS來驅動的,pygments預設是不帶樣式的。不過你可以借助它生成一個預設的css。

E:>pygmentize -S default -f html > default.css

把default.css放到專案中去,此時就能看到高亮程式碼了。如果你不喜歡這個樣式的話,pygments-css提供了很多樣式供你選擇。

Django1.8返回json字串和接收post的json字串內容  http://www.linuxidc.com/Linux/2015-07/120226.htm

如何使用 Docker 元件開發 Django 專案?  http://www.linuxidc.com/Linux/2015-07/119961.htm

Ubuntu Server 12.04 安裝Nginx+uWSGI+Django環境 http://www.linuxidc.com/Linux/2012-05/60639.htm 

Django+Nginx+uWSGI 部署 http://www.linuxidc.com/Linux/2013-02/79862.htm 

Django實戰教學 http://www.linuxidc.com/Linux/2013-09/90277.htm 

Django Python MySQL Linux 開發環境搭建 http://www.linuxidc.com/Linux/2013-09/90638.htm 


IT145.com E-mail:sddin#qq.com