0

このコードでは;

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 だけを更新できるかどうかです。

4

1 に答える 1

1

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

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

1 つの方法は、専用の iframe を使用することです。iframe は、単なるブラウザー ウィンドウ内のブラウザー ウィンドウと考えてください。好きなコンテンツを iframe に挿入でき、ページ内の周囲のコンテンツとは別に iframe を更新できます。iframe アプローチは、周囲のページのコンテンツと iframe 自体のコンテンツが別の場所から供給されている場合によく使用されます。たとえば、Facebook の「いいね ウィジェット」は、Facebook のコンテンツを使用します。Facebook は長い間、ユーザーが自分のページに埋め込む方法を提供してきました。これは、ちょうど like ウィジェットを含む iframe です。このようにして、Facebook は、ウィジェットが埋め込まれたページの種類に関係なく、画像、ブランディング、ルック アンド フィールなどを制御し続けることができました。

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

このアプローチは、非同期 Javascript および XML を指して、AJAX と呼ばれることもあります。基本的な考え方は、コンテンツを取得するために、ブラウザーからサーバーに対して行われる (通常のページ更新サイクルからの) 非同期要求を意味します。JavaScript で実装されたブラウザ ロジックは、任意の方法で UI を更新できます。

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

「標準」の Web ブラウザ モデルでは、ページ リクエストごとに 1 つの HTTP リクエストが送信されます (ただし、.css ファイル、画像などに対して追加のリクエストが送信される場合があります)。追加のリクエストごとに、ページ全体が更新されます。AJAX モデルでは、ブラウザーは以前と同様に最初に Web ページを要求しますが、ページを完全に更新することなく、非同期で追加の HTTP 要求を送信できます。

于 2012-04-05T21:04:18.170 に答える