jQuery Mobile用のHTMLをPyJadeで書いているんだけど、いちいちファイルを修正するたびに手でコマンド打つのもめんどくさくなったので、ファイルの更新を検知して自動的にコンパイルするようにしてみた。
import jinja2 import time import sys import watchdog.events import watchdog.observers env = jinja2.Environment(extensions=['pyjade.ext.jinja.PyJadeExtension']) env.loader = jinja2.FileSystemLoader('.') class JadeHandler(watchdog.events.FileSystemEventHandler): def __init__(self, file): self.file = file html = file self.html = html.replace('.jade', '') + '.html' def on_modified(self, event): if event.src_path.endswith(self.file): template = env.get_template(self.file) with open(self.html, 'w') as f: f.write(template.render().encode('utf-8')) print "file modified (re-compiled)" def main(): file = sys.argv[1] event_handler = JadeHandler(file) observer = watchdog.observers.Observer() observer.schedule(event_handler, path=".") observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join() if __name__ == "__main__": main()
これでなかなか快適にはなったんだけど、jadeで書いてみて思うのはdata-属性多すぎで見栄えが悪い。いっそdata-は@に置換してしまったらどうだろうかと。
div(@theme='a', @role='footer', @position="fixed") div(@role="navbar") ul li: a(href="#", @icon="home") Home li: a(href="#", @icon="search") Search li: a(href="#info", @icon="info") Info
これでいけそうなカンジがするので、Jinjaにテンプレートを読ませる前に@をdata-に置換する処理をかましておけば、jqm用のHTMLを快適に書けそうだ。