最近、すこしわかってきた。要するにSQLFORMを1functionで済ませようという発想です。
データ一覧のテーブルのTHEADなどは呼ぶときに、messageや戻りアドレスはsettingsです。
その辺りはhttp://www.web2py.com/book/default/chapter/07#CRUDに詳しいのですが、実際に使うと驚くほどに簡単。
一番に理解を超えていたのが
def data(): return dict(form=crud())
とかくと、以下のURLがexposeされるという説明でした。
http://.../[app]/[controller]/data/tables
http://.../[app]/[controller]/data/create/[tablename]
http://.../[app]/[controller]/data/read/[tablename]/[id]
http://.../[app]/[controller]/data/update/[tablename]/[id]
http://.../[app]/[controller]/data/delete/[tablename]/[id]
http://.../[app]/[controller]/data/select/[tablename]
http://.../[app]/[controller]/data/search/[tablename]
これでViewはまったくいじらずに機能が実現します。
djangoにも同じようなのがありますが、結構に面倒くさかった。
そこで自分のアプリにも使ってみた。アドミだけが使うDBのメンテナンスだが、マスタースケジュールを作成、リスト、更新する
def list_schedule():
db.schedule.id.represent=lambda id: A('edit:',id,_href=URL('update_schedule',args=(id)))
return dict(records=crud.select(db.schedule, db.schedule.id>0))
このfunctionはscheduleテーブルから全レコードを表示しています。表示されたIDの部分にhrefが隠れていて次の関数update_scheduleを呼びます。
def update_schedule():
return dict(form=crud.update(db.schedule, request.args(0),next=URL('list_schedule')))
scheduleを更新するフォームを表示して、更新したらlist_scheduleに戻ります。
def create_schedule():
form = crud.create(db.schedule, next=URL('create_schedule'),
message=T("record created"))
db.schedule.id.represent=lambda id: A('edit:',id,_href=URL('update_schedule',args=(id)))
return dict(form=form, records=crud.select(db.schedule, db.schedule.id>0,))
全てのscheduleと新規作成のフォームを表示しています。
ようするにappadminと同じなんですが、柔軟性と開発スピードではappadminとSQLFORMの間にあるということでしょうか。
htmlは何も書かなくて大丈夫です。