GAEでDocutilsを使う方法
GAEで動くアプリケーションでDocutilsを使おうとしたところ、何故かエラーが発生してしまいました。エラーメッセージを読むと、GAEでは使用不可能なAPIを、Docutilsが内部で使用しているため、このようなエラーが発生してしまうということが分かりました。
この問題の解決方法は、既にこちらのページで紹介されています。その方法は、docutils/frontend.pyの以下の部分をコメントアウトするというものです。
if read_config_files and not self.defaults['_disable_config']: try: config_settings = self.get_standard_config_settings() except ValueError, error: self.error(error) self.set_defaults(**config_settings.__dict__)
しかし、この部分のソースをよく見ると、self.defaultという名前のディクショナリ(おそらく設定か何か)の_disable_configがTrueになっていれば、問題の部分を実行しないということが分かります。案の定、Djangoプロジェクトのsettings.pyに以下の設定を加えるだけで、この問題は解決することが出来ました。
RESTRUCTUREDTEXT_FILTER_SETTINGS = dict(_disable_config=True)
DocutilsのAPIを直接使う場合は、
from docutils.core import publish_parts source = "HTML化したいreStructuredText形式のテキスト" settings = dict(_disable_config=True) parts = publish_parts(source=source, writer_name="html4css1", settings_overrides=settings) html = parts["whole"] # html = parts["fragment"]
といったところでしょうか。
ちなみに、Djangoではsettings.py中にRESTRUCTUREDTEXT_FILTER_SETTINGSという名前のディクショナリを作成することで、restructuredtextフィルタの挙動を制御することが出来ます。他の使い方としては、例えば、
RESTRUCTUREDTEXT_FILTER_SETTINGS = dict(initial_header_level=3)
としておけば、見出しで使うタグをh1ではなくh3にすることが出来ます。