0

'yield'関数は、出力をブラウザーにストリーミングします。つまり、応答に値を追加します。

私の要件は、「追加」の代わりに、古い値を上書きする組み込み関数があるか、または単に古い値に新しい値を追加しないと言うことです。

私の要件を説明するには:

以下は私の「views.py」の関数です:

def handle_uploaded_file(f):
    filename = "/media/Data/static/Data/" + f.name
    uploaded = 0
    perc = 0.0
    filesize = f.size
    destination = open(filename, 'wb+')
    for chunk in f.chunks():
        destination.write(chunk)
        uploaded = uploaded + len(chunk)
        yield(str((uploaded * 100) / filesize) + "% ")
    destination.close()
    yield(f.name + " (" + str(round(f.size/1024.0, 2)) + " KB) uploaded successfully.")

上記の関数の出力は次のとおりです。

2% 4% 7% 9% 11% 14% 16% 18% 21% 23% 25% 28% 30% 32% 35% 37% 39% 42% 44% 46% 49% 51% 53% 56% 58% 60% 63% 65% 67% 70% 72% 74% 77% 79% 81% 84% 86% 89% 91% 93% 96% 98% 100% Butterfly.wmv (2732.16 KB) uploaded successfully.

ご覧のとおり、パーセンテージは前に渡された値に追加されますが、古い値を新しい値で上書きしたいと思います。

Django / pythonにこの動作のための組み込み関数はありますか?または、コードを使用してこれをシミュレートできますか?

前もって感謝します。

4

2 に答える 2

3

すでにブラウザに送信したものを上書きすることはできません。これはリモートネットワーク接続です。覚えておいてください。何かが送信されると、それは送信されます。

希望する結果を得るには、JavaScriptまたはCSSを使って何か賢いことをする必要があります。

于 2011-03-01T13:05:14.483 に答える
0

この応答はかなり汚れているように見えます。

一般的に、ファイルアップロードの進行状況バーのほとんどは、JavaScriptとWebサーバーモジュール(Railsで使用)またはアップロードのステータスをJSONで返すJSONビュー(djangoで使用)を使用して実装されます。ここにいくつかのモジュールがあります:

  • Apacheのupload_progress_module
  • nginxのHttpUploadProgressModule
  • lighttpdのmod_uploadprogress

これらのモジュールはRailsを念頭に置いていることに注意してください。ただし、進行状況を返すjsonビューのインターフェイスがどのように見えるかがわかります。そして、JS部分で物事がどのように機能するかについて一般的な感覚を得ることができるいくつかのJavaスクリプトの例があります。

于 2011-03-01T13:20:13.923 に答える