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を快適に書けそうだ。