38

私のプロジェクトでは、ユーザーをパラメーターを含むものにリダイレクトする必要がある状況があり、 urls.pyで次のように宣言されています。url

url(r'^notamember/(?P<classname>\w+)/$', 
                           notamember,
                           name='notamember'),)

そのパラメーターを return に入れるにはどうすればよいHttpResponseRedirectですか? 私は次のように試しました:

return HttpResponseRedirect('/classroom/notamember/classname')

とにかく、これは愚かです、私は知っています、私はクラスマネをパラメータと見なすことはできません. わかりやすくするために、私のview.pyは次のとおりです。

def leave_classroom(request,classname):
    theclass = Classroom.objects.get(classname = classname)
    u = Membership.objects.filter(classroom=theclass).get(member = request.user).delete()
    return HttpResponseRedirect('/classroom/notamember/theclass/')

その中に変数theclassを含めるにはどうすればよいurlですか? どうもありがとう!

4

5 に答える 5

60

これは複雑ではありません。への引数HttpResponseRedirectは単なる文字列であるため、文字列を作成するための通常の規則がここに適用されます。theclassただし、変数は文字列ではなく ClassRoom オブジェクトであるため、変数は必要ないと思います。おそらく、classname代わりに が必要です。adamk はここで正しい答えを与えてくれました。

ただし、文字列だけを使用できると言いましたが、実際にすべきことはreverse関数を使用することです。これは、後で URL 構造を変更することを決定する可能性があるためです。URL 文字列をハードコーディングした各場所を見つけるためにコードを調べるのではなく、1 つの場所でそれらを定義したことに依存する必要があります。つまり、URL です。 py ファイル。したがって、次のようにする必要があります。

from django.core.urlresolvers import reverse

url = reverse('notamember', kwargs={'classname': classname})
return HttpResponseRedirect(url)
于 2010-06-29T11:32:08.943 に答える
52

これを試して:

return HttpResponseRedirect('/classroom/notamember/%s/' % classname)

編集:

これは確かに優れています(ダニエル・ローズマンの答え):

from django.core.urlresolvers import reverse

url = reverse('notamember', kwargs={'classname': classname})
return HttpResponseRedirect(url)
于 2010-06-29T11:02:45.787 に答える
5

実際には、ショートカットredirectはビュー名とモデル (get_absolute_url定義済み) 名も取得します。

from django.shortcuts import redirect

return redirect(leave_classroom)
于 2010-06-29T13:31:54.703 に答える