読者です 読者をやめる 読者になる 読者になる

Web アプリに Wiki 記法を簡単に導入できる Python の textile モジュール

python

Wiki 記法が好きです。Wiki 記法に似た、はてな記法も好きです。ドキュメントは出来れば Wiki に書きたいと常々思っています。実際、私がドキュメントを書くときはたいてい Wiki です。


Word は苦手です。出来上がるものは HTML で書いた方がマシだと思えるくらいです。Word を使いこなせていない、というのは自分でも分かっています。でも、ドキュメントも慣れたテキストエディタで書きたいんです。


そんな欲求は Web アプリの UI にも反映されます。テキストの入力には Wiki 記法を採用したい。


Python には、Wiki 記法を HTML に変換する textile モジュールがあります。Textile は GitHub や Redmine で採用されている Wiki 記法の一種。


例えば

# -*- coding: utf-8 -*-

import textile

text = """

h1. 見出し1

h2. 見出し2

h3. 見出し3

h4. 見出し4

h5. 見出し5

h6. 見出し6

* リスト
** 要素1
*** 子要素1
** 要素2

# 番号付リスト
## 要素1
### 子要素1
## 要素2

|_. Header1|_. Header2|_. Header3|
|Cell1|Cell2|Cell3|
|Cell1|Cell2|Cell3|
"""

html = textile.textile(text)
print(html)

このサンプルを実行すると

<h1>見出し1</h1>

<h2>見出し2</h2>

<h3>見出し3</h3>

<h4>見出し4</h4>

<h5>見出し5</h5>

<h6>見出し6</h6>

<ul>
        <li>リスト
<ul>
        <li>要素1
<ul>
        <li>子要素1</li>
</ul></li>
        <li>要素2</li>
</ul></li>
</ul>

<ol>
        <li>番号付リスト
<ol>
        <li>要素1
<ol>
        <li>子要素1</li>
</ol></li>
        <li>要素2</li>
</ol></li>
</ol>

<table>
        <tr>
                <th>Header1</th>
                <th>Header2</th>
                <th>Header3</th>
        </tr>
        <tr>
                <td>Cell1</td>
                <td>Cell2</td>
                <td>Cell3</td>
        </tr>
        <tr>
                <td>Cell1</td>
                <td>Cell2</td>
                <td>Cell3</td>
        </tr>
</table>

という HTML が生成されます。


textile を Web アプリで使う場合は、生成された HTML をテンプレートに埋め込んで表示すればいいですね。その際、safe フィルタを忘れずに。