0

私のviews.py:

 @login_required
 def some_views(request):
     if request.method == 'POST':
         form = AddressCreateFrom(request.POST)
         if form.is_valid():
             name = form.cleaned_data['Address']
             ip_value = form.cleaned_data['value']
             user_list = get_username(name)
             address_create = form.save()
             extra_context = {
                 'user_list': user_list
                 }
             return redirect_to(request, url=address_create.get_absolute_url())
     else:
         form = AddressCreateFrom()
     extra_context = {
         'form':AddressCreateFrom(initial={'user': request.user.pk})
         }
     return direct_to_template(request,'networks/user_form.html',extra_context)

form.py で:

 class AddressCreateFrom(forms.ModelForm):
     Address = forms.CharField(max_length=40)
     value = forms.CharField(max_length=40)
     class Meta:
         model = Network
         widgets = {
             'user': forms.HiddenInput()
           }

Address and valueご覧のとおり、クラスで2つの追加のDjangoフォームフィールドを持つDjangoモデルフォームを使用していますAddressCreateForm。テンプレートのレンダリング時にすべてのフィールドが必要です。

確かにメソッドは正常に動作していますが、 ieにsome_views書き込まれた余分なデータをリクエストしているieにレンダリングしたいと考えています。context_dictionaryuser_listURLaddress_create.get_absolute_url()

私が間違っていなければ、データベースを扱う場合はredirect_toメソッドを使用する必要があります。それは可能ですか?

4

2 に答える 2

5

リダイレクトは、ステータスコード301または302のHTTP応答と、リダイレクト先の場所を返します。

301 MOVED PERMANENTLY
Location: http://www.example.com/new-url/

元のビューでレンダリングされたテンプレートがないため、元のビューに渡すことはできませんextra_context

ユーザーのブラウザは通常、リダイレクトに従い、新しいURLを要求します。

特定のユーザーに関する情報を次のビューに表示する場合は、次のような操作を行う必要があります。

  1. ユーザーIDを含むようにURLパターンを設計します/users/200/
  2. たとえば、getパラメータとしてインクルードし、ビュー/users/?id=200からユーザーIDを取得しrequest.GETます。
  3. user_idをセッションに保存します
  4. リダイレクトする前に、ユーザーデータを使用してメッセージフレームワークを使用してメッセージを作成します。

次に、リダイレクト先のビューで、データベースからユーザーをフェッチし、それをテンプレートコンテキストに追加できます。

于 2012-06-01T13:22:38.980 に答える
2

Context、Extra Context、および POST Data は、リダイレクト後は存続しません。

これがあなたができることです。

# before the redirect
....
request.session['user_list'] = user_list
return redirect_to(request, url=address_create.get_absolute_url())

# after the redirect (in the views.py that handles your redirect)
....
user_list = request.session['user_list']
extra_context = { 'user_list': user_list }
....
# now you have the user_list in the extra_context and can send it to the rendering engine.

注:このソリューションは、独自のサーバー内のリダイレクトに対してのみ機能します。

于 2012-06-01T15:03:12.097 に答える