メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2011年3月23日水曜日

[python][django] 画面遷移制御ってどうやるんだろう・・・

djangoで画面遷移制御ってどうやるんだろう・・・

viewsがいわゆるControllerにあたるらしい。
で、templateがいわゆるViewにあたるらしい。


まだまだ勉強中なので、いずれ見つかるかもしれないけど、
とりあえず分からないので
input type="submit"のname属性と現ページを保持する
_pageパラメータで遷移することにした。

form.html、confirm.html、complete.html
の3つのページがあるものとして、
form.htmlは入力フォーム、confirm.htmlは確認画面、
complete.htmlは完了画面。

form.htmlで、


<input type="hidden" name="_page" value="0" />
<input type="submit" name="_target1" value="次へ" />
 

とし、
confirm.htmlでは

<input type="hidden" name="_page" value="1" />
<input type="submit" name="_target0" value="戻る" />
<input type="submit" name="_finish" value="登録" />
 

などとして、遷移制御。
Spring Framework(?)のまね。

views.pyでは

_page_re = re.compile(r'^_page$')

def _get_current_page(request, defvalue):
for key in request.POST.iterkeys():
if _page_re.match(key):
return int(request.POST['_page'])
return defvalue


ってな感じでgetCurrentPageを実装。
そして、

target_re = re.compile(r'^_target(\d)')
finish_re = re.compile(r'^_finish$')
TARGET = [
u'form.html',
u'confirm.html',
u'complete.html',
]

def _get_target_page(request, defvalue):
for key in request.POST.iterkeys():
if target_re.match(key):
p_no = target_re.search(key)
return int(p_no.group(1))
if finish_re.match(key):
return len(TARGET)-1
return defvalue


って感じでgetTargetPageを実装。
んで、currentとtargetを使って表示すべき画面をrenderすると。

でも、これだとdjangoのやり方では無いのではないかなぁ。。。
うーむ。。。。

.

----

って書いてて気づいたけど
has_keyした方がいいね!

.

0 コメント: