2012-04-05 11 views
0

このコードでは、http投稿でちょうどdivをリフレッシュ

def post(self): 
    chtml = displayhtml(public_key, error = None) 
    template_values = {'captchahtml': chtml} 
    path = os.path.join(os.path.dirname(__file__), 'main.html') 
    self.response.out.write(template.render(path, template_values)) 

http投稿要求が行われたとき、私は指定されたテンプレート要素でページ全体を更新できます。

私の質問は、ページ全体ではなくdivまたはiframeをリフレッシュできるかどうかです。

答えて

1

はい、リクエスト中にページの一部を更新することは可能です。

しかし、それを容易にするために、ブラウザ側にいくつかのアプリケーションまたはUIロジックが必要です。

専用のiframeを使用する方法もあります。 iframeは単にブラウザウィンドウ内のブラウザウィンドウと考えることができます。好きなコンテンツをiframeに挿入することができ、iframeをページ内のコンテンツとは別に更新することができます。 iframeアプローチは、周囲のページのコンテンツとiframe自体のコンテンツが異なる場所から供給されている場合によく使用されます。たとえば、Facebookのような "ウィジェット"はFacebookのコンテンツを使用します。長い間、Facebookは人々に自分のページに埋め込む方法を提供しました。ちょうど同じようなウィジェットを含むiframeです。このように、Facebookは、ウィジェットがどのようなページに埋め込まれていたかにかかわらず、イメージ、ブランド、ルック・アンド・フィールなどのコントロールを維持することができました。

フレームのコンテンツと周囲のビットのコンテンツがappengineインスタンスと同じソースからのものである場合、iframeは必要ありません。単純なdivを使用して、非同期に更新することができます。

このアプローチは、AJAXと呼ばれることもあります - 非同期JavascriptとXMLを参照してください。基本的な考え方は、ブラウザーからサーバーへの非同期要求(通常のページ更新サイクル外)がコンテンツを取得することを意味します。 javascriptで実装されたブラウザロジックは、UIが選択した方法で更新できます。

名前とは異なり、このような非同期要求からの応答としてXMLを送信することは必須ではありません。実際、より一般的なアプローチはJSONをデータ形式として使用することです。しかし、確かに、このデザインパターンを使用すると、サーバー上のPythonコードは通常、フォーマットされたHTMLを返さないでしょう。いくつかの合理的なフォーマット(XML、JSON、その他)でデータを返し、ブラウザで実行されているJavascriptロジックは、そのデータを適切な場所にHTMLとしてレンダリングします。

"標準"ウェブブラウザモデルでは、1ページ要求ごとに1つのHTTP要求が送信されます(ただし、.cssファイルや画像などの追加要求が送信されることがあります)。 AJAXモデルでは、ブラウザは以前と同様にWebページを最初に要求しますが、ページを完全にリフレッシュせずに、追加のHTTP要求を非同期に送信できます。

+0

ありがとうございます。 私のコードでajaxを使用するにはどうすればいいですか? –

+0

AJAXの設計アプローチに関する基本的なチュートリアルを読む必要があります。ここには良いものがあります:http://www.ibm.com/developerworks/library/wa-aj-ajaxhistory/index.html AJAXはブラウザで使用されています。あなたがサーバー上でPythonを使用していることは重要ではありません。ブラウザからのAJAX要求に応答するためにサーバー上にロジックを作成する必要がありますが、それはかなり簡単です。 – Cheeso