自分用のテンプレート作成スクリプトを作った
細々したウェブアプリを作るのにわざわざ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)