1

次のことを行う簡単な方法はありますか?

ビューでリクエストを受け取った後、ファイルとページの再レンダリングされたテンプレートをユーザーに送り返しますか?応答をファイルとrender_to_responseに「マージ」するようなもの

これは私がファイルで応答を返す方法です:

filename = "/path/to/somewhere"
wrapper  = FileWrapper(open(filename))
content_type = mimetypes.guess_type(filename)[0]
response = HttpResponse(wrapper,content_type=content_type)
response['Content-Length'] = os.path.getsize(filename)
response['Content-Disposition'] = "attachment; filename=%s"%filename
return response

これは、レンダリングされたデータを含む通常のテンプレートを返す方法です。

data = getData()
return render_to_response('../templates/some_template.html', {'data': data,})

(私はコピーアンドペーストでいくつかの重要な行を落としたかもしれませんが、私の主張を明確にするために-このコードは機能します、問題はこれらの2つのコードサンプルではありません)

問題は、両方を「マージ」するにはどうすればよいかということです。djangoの標準機能でこれを行う簡単な方法はありますか?これにはAjaxを使用する必要がありますか?(私はajaxに精通していません...したがって、これを行わずにこれを行う方法がある場合は、それが望ましいです)

ありがとう、

4

2 に答える 2

4

ハイパーテキスト転送プロトコルの表示を単純化する場合、ユーザーがアプリケーションを操作する方法は、アプリケーションが応答を提供する要求を送信することです。RFC 6266のセクション4.2で、「添付ファイル」処理タイプに一致する応答を返す場合、「通常どおりに処理するのではなく、応答をローカルに保存するようにユーザーに促す」ようにユーザーのクライアントに指示します。

HTMLやその他のコンテンツタイプを含み、一方を保存してもう一方を表示するようにクライアントに指示できる応答を提供することはサポートされていません。サポートされていないという事実は、そのようなユーザーエクスペリエンスを提供するための代替手段を探すべきではないという意味ではありませんが、私たちがそれを実践しておらず、ユーザーがそれを期待しないことを示唆するはずです。

しかし、事実はさておき、本当にやりたいのであれば、ファイルの提供と新しいHTMLドキュメントの表示には2つの別々の要求/応答コンテキストが必要であることを理解する必要があります。最も単純な設計には、ユーザーがファイルを取得する要求を開始するページも含まれ、ユーザーがファイルを完全に取得したときに通知を受けるアプリケーションをサブスクライブしてから、新しいコンテンツを表示したり、にリダイレクトしたりします。新しいページ。

于 2012-05-01T15:09:14.727 に答える
0

マルチパートを使用することが可能です。

HttpResponseはサブクラス化されており、マルチパートデータを返すことができます。

クライアント側では、データをチャンクで受信し、適切なMimeタイプに従って解析する必要があります。

これが実装です

https://anentropic.wordpress.com/2010/05/14/jsdjango-streaming-multi-part-ajax-responses-mxhr/

于 2014-12-25T15:33:59.930 に答える