メモ代わり。てきとーに。 いや、ですからてきとーですって。 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で、

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

とし、
confirm.htmlでは
  1. <input type="hidden" name="_page" value="1" />  
  2. <input type="submit" name="_target0" value="戻る" />  
  3. <input type="submit" name="_finish" value="登録" />  

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

views.pyでは
  1. _page_re = re.compile(r'^_page$')  
  2.   
  3. def _get_current_page(request, defvalue):  
  4.  for key in request.POST.iterkeys():  
  5.   if _page_re.match(key):  
  6.     return int(request.POST['_page'])  
  7. return defvalue  

ってな感じでgetCurrentPageを実装。
そして、
  1. target_re = re.compile(r'^_target(\d)')  
  2. finish_re = re.compile(r'^_finish$')  
  3. TARGET = [  
  4.   u'form.html',  
  5.   u'confirm.html',  
  6.   u'complete.html',  
  7. ]  
  8.   
  9. def _get_target_page(request, defvalue):  
  10.   for key in request.POST.iterkeys():  
  11.     if target_re.match(key):  
  12.       p_no = target_re.search(key)  
  13.       return int(p_no.group(1))  
  14.     if finish_re.match(key):  
  15.       return len(TARGET)-1  
  16.   return defvalue  

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

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

.

----

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

.

0 コメント: