0

「edit」という名前のビュー関数と「handle_upload」という名前の関数を持つモジュールがあります。

edit関数で利用可能な2つの変数の値をhandle_upload関数に渡したいのですが、view関数でhandle_upload関数を呼んでいないので渡し方がわかりません。パラメータとしての値。

明確にするために:

# my_module.py

def edit():
    dynamic variable #1
    dynamic variable #2
    render_to_response(some_site.html, locals(), context_instance = RequestContext(request))

def handle_upload():
    # here is where I would want to get both variables. 
4

3 に答える 3

2

djangoサーバーへの2つの別々のリクエストで変数を利用できるようにしたいようです-最初に、ユーザーがeditビューに移動したときにそれらを設定し、次に呼び出す別のビューでそれらを取得したいhandle_upload.

渡す実際のデータに応じて、ここには 2 つのオプションがあります。

  • それをテンプレートに渡し、編集フォームの非表示フィールドとして追加します。

これが最も簡単な方法かもしれませんが、機密データには注意してください。悪意のあるユーザーにこのデータを表示 (さらには編集) させたくない場合は、これを行わないでください。ユーザーが悪意を持っている場合、非表示の html フィールドを編集できます。サーバーの安全性を損なう可能性がある場合は、この情報が正しいとは限りません。

renderまず、 の代わりにを使用することをお勧めしますrender_to_response。後者は時代遅れであり、まもなく廃止される予定です。renderオブジェクトがあることを確認RequestContextし、最初の引数が実際のrequestオブジェクトである必要があります。

render(request, 'some_site.html', locals())

次に、テンプレートのフォーム内で次のようにします。

<input type='hidden' name='name1' value='{{ dynamic_variable_1 }}' />
<input type='hidden' name='name2' value='{{ dynamic_variable_2 }}' />

次に、などrequest.POST.get('name1')の値を取得するために使用します。dynamic_variable_1

  • セッション ミドルウェアを使用します。

このようにして、データはサーバーにとどまり、Python オブジェクトのままになるため、あらゆる種類のオブジェクトを処理できます (100% 確実ではないと思います)。

まず、あなたのsettings.py'django.contrib.sessions.middleware.SessionMiddleware'にあることを確認してください。Django のコマンドMIDDLEWARE_CLASSESを使用した場合はデフォルトです。startapp

次に、 で次の操作を行いますedit

request.session['name1'] = dynamic_variable1
request.session['name2'] = dynamic_variable2

次に、 を呼び出すビューでhandle_upload、次の操作を行い、変数を に渡しますhandle_upload

dynamic_variable1 = request.session['name1']
dynamic_variable2 = request.session['name2']
于 2013-08-08T19:29:17.360 に答える
0

次のようなものに行くことができます:

 dynamic variable #1
 dynamic variable #2

 def edit():
      global dynamic variable #1, dynamic variable #2
      render_to_response(… )

 def handle_upload():
       global dynamic variable #1, dynamic variable #2
      #… 

ただし、マルチスレッドを使用している場合は、グローバル変数に注意してください。その場合は、ロックを検討してください ;-)

于 2013-08-08T18:45:56.200 に答える
0

2 つのオプションがあります。

  • globalキーワードを使用して 2 つの変数をグローバルに宣言します
  • 2 つの引数をhandle_upload取り、2 つの変数を

から呼び出していない場合はedit()、2 つの変数をedit()呼び出しサイトに返し、そこから に渡す必要handle_upload()があります。

于 2013-08-08T18:35:24.657 に答える