7

そのため、Google App EngineでDjangoを使用しており、各URLを対応するメソッドにリダイレクトするurls.pyファイルがあります。これらの各メソッドには、引数の1つとして「request」が自動的に渡されます。これはHttpRequestオブジェクトであると私は信じています。

コード内からこの入力されたリクエストオブジェクトを作成するにはどうすればよいですか?たとえば、コードの奥深くにあるメソッド内にいる場合、すべての関数に渡さなくてもこのリクエストオブジェクトにアクセスして、使用可能であることを確認したいと思います。urls.pyがメソッドfooを呼び出すと仮定すると、私が現在行っている方法は次のとおりです。

foo(request):
    # stuff here
    bar(request)
     # more stuff here

bar(request):
     # stuff here<stuff>
    baz(request)
     # more stuff here

baz(request):
    do something with request here

これは間違っているようです。なぜなら、bazで使用できるようにするために、要求を必要としない関数に要求を渡す必要があるからです。

私は次のようなことをしたいと思います:

foo(request):
     # stuff here
    bar()
    # more stuff here

bar():
     # stuff here
    baz()
     # more stuff here

baz():
    request = HttpRequest()
    do something with request here

つまり、必要がない場合はリクエストを渡さないでください。ただし、request = HttpRequest()を実行すると、空のリクエストオブジェクトが返されます...必要なのは、urls.pyから呼び出される各メソッドに渡されるもののように、完全に入力されたバージョンです。

http://docs.djangoproject.com/en/dev/ref/request-response/にあるHttpRequestのドキュメントを一瞥しました が、その方法がわかりませんでした。

どんな考えでも大歓迎です。

ありがとう、ライアン

4

2 に答える 2

0

ビュー定義の前にリクエスト変数を作成し、ビューから受け取ったときにその値を設定するだけです (サンプルコードを使用):

current_request = None

foo(request):
    current_request = request
    # stuff here
    bar()
    # more stuff here

bar():
     # stuff here
    baz()
     # more stuff here

baz():
    # do something with currest_request here

参照: Python 変数のスコープに関する注意事項

更新: この質問はあなたのものと非常によく似ており、受け入れられた解決策は基本的にグローバルなリクエスト変数を作成し、それを設定に添付することです。

于 2010-01-19T23:15:27.250 に答える