2012-03-05 11 views
0

レンダリングページのこのコードで何が問題になるか分かりません。App Engine Python:テンプレートが正しくレンダリングされない

def post(self): 
     acct = self.request.get('account') 
     pw = self.request.get('password') 

     que = db.Query(User) 
     que = que.filter('account =', acct) 
     que = que.filter('password =', pw) 
     results = que.fetch(limit = 1) 

     values = { } 
     newval = dict(values) 
     newval['path'] = self.request.path 

     if len(results) > 0: 
      path = os.path.join(os.path.dirname(__file__), 'templates/sites.htm') 
      self.response.out.write(template.render(path, {})) 

は私が「loginscreen.htm」という名前のページにあるログインフォームからそれを呼び出します。アプリケーションは、このコードの一部に達する :

if len(results) > 0: 
    path = os.path.join(os.path.dirname(__file__), 'templates/sites.htm') 
    self.response.out.write(template.render(path, {})) 

をして「sites.htm」にリダイレクトしようとするには、ページ「sites.htm」を正しく表示されますが、アドレスバーにそれはまだ示しています:

'にhttp:// localhost:8080 /ログイン'(ルート "loginscreen.htm" からの着信要求を "/はログイン")'にhttp:// localhost:8080/sites.htm'べき 代わりに表示されます。

この問題の主な問題は、ページをリロードすると、「フォーム再送信の確認」ダイアログが表示され、ユーザーがフォームを再度送信できるようになることです。 しかし、私は

self.redirect('sites.htm') 

でアドレスバーが表示さ'にhttp:// localhost:8080/sites.htm'

path = os.path.join(os.path.dirname(__file__), 'templates/sites.htm') 
self.response.out.write(template.render(path, {})) 

を交換する場合正しくを。

コードに何が問題なのですか?

申し訳ありませんが、私はこの質問音をもっと複雑にする必要があります。

ありがとうございます!

答えて

4

あなたの問題は、ここで誤解です:

は「loginscreen.htm」という名前のページにあるログインフォームからそれを呼び出します。

if len(results) > 0: 
    path = os.path.join(os.path.dirname(__file__), 'templates/sites.htm') 
    self.response.out.write(template.render(path, {})) 

と、「sites.htm」にページ「sites.htm」 が正しく表示さをリダイレクトしようとしますが、アドレスバーに、それはです:アプリケーションがコードのこの部分に達する まだ示す:

このコードは、リダイレクトのように何もしない - それがないすべては、POSTリクエストに応じてsites.htmでテンプレートをレンダリングすることにより、そのログインの試みに応答するのAppEngineを伝えています。リダイレクトする場合は、明示的に行う必要があります(既に試したようです)。

関連する問題