自分用のテンプレート作成スクリプトを作った

細々したウェブアプリを作るのにわざわざ10個しかないGoogle App Engineのアプリケーション枠を使うのはもったいない。app-engine-patchを使っているので./manage.py startapp fooで作れば、一つのアプリケーション枠でいくつも動かせるし、独立したアプリにしたいときもラクチン。なんだけどデフォルトの./manage.py startappだとapp-engine-patchの使っているURLディスパッチのためのファイルとかを作ってくれない。というわけで面倒な作業を自動化するスクリプトを書いた。まあ僕が便利なように作ったので僕仕様べったりだけどね。./startapp.py してプロジェクト名とタイトルを入れるとurls.pyとurlsauto.pyとtemplates/index.htmlを作って、index.htmlを表示するだけのビューをviews.pyに追加して、settings.pyにアプリを書き加える。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
startapp with my template
"""

import os
appname = raw_input("appname> ")
title = raw_input("title> ")

os.system("python manage.py startapp %s" % appname)

file(os.path.join(appname, "urlsauto.py"), "w").write("""\
# -*- coding: utf-8 -*-
from django.conf.urls.defaults import *

urlpatterns = patterns('',
    (r'^%(appname)s/', include('%(appname)s.urls')),
)
""" % globals())

file(os.path.join(appname, "urls.py"), "w").write("""\
# -*- coding: utf-8 -*-
from django.conf.urls.defaults import *

urlpatterns = patterns('%(appname)s.views',
    (r'^$', 'index'),
)
""" % globals())

file(os.path.join(appname, "views.py"), "a").write("""
def index(request):
    return render_to_response(
        request, 
        '%(appname)s/index.html',
        dict())
""" % globals())

file(os.path.join(appname, "templates", "index.html"), "w").write(("""\
{@ extends '_base.html' @}
{@ block title @}%(title)s{@ endblock @}

{@ block content @}
<a href="{@ url %(appname)s.views.index @}"><h1>%(title)s</h1></a>
{@ endblock @}
""" % globals()).replace("@", "%"))

data = file("settings.py").read().replace(
    "# add my application here",
    "'%(appname)s',\n    # add my application here" % globals()
)

file("settings.py", "w").write(data)