3

一般的なFormViewを使用して、ユーザーに送信されたPOSTデータについて何かを反映したいのですが、これを行うための最善の方法がわかりません。

class MyView(generic.FormView):
    form_class = MyForm
    def get_success_url(self):
        return reverse('success')

reverse('success')シンプルにリダイレクトします

class SuccessView(generic.TemplateView):
    template_name = 'success.html'

呼び出しを介してparamsオブジェクトにアクセスする方法はありますか、それともこれを行うためのより良い(そしてより簡単な)方法はありますか?TIAダンSuccessViewget_success_url

更新(私の解決策ですが、アイデアに感謝します)

私は実際、これが問題を解決するための(私にとって)最も簡単な方法であることに気づきました。

class SuccessMixin(object):
    def post(self, request, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form, **kwargs)

    def form_valid(self, form):
        # this is my post processing step which returns the
        # feedback data that I want to pass to the user
        form_data = form.get_some_data_from_form()
        return render_to_response('submitted.html', 
            {'form_data': form_data,}, 
            context_instance=RequestContext(self.request))

各ビューはこのミックスインを継承します。フォームが有効な場合は、フォームからフィードバックデータを取得し、応答としてレンダリングします。get_success_urlリダイレクトを完全にバイパスします。とを削除しましget_success_urlSuccessView

4

3 に答える 3

5

GET成功URLにパラメーターとしてデータを含めます。

def get_success_url(self):
   url = reverse('success')
   # maybe use urlencode for more complicated parameters
   return "%s?foo=%s" % (url, self.request.POST['bar'])

次に、テンプレートで、GETデータのパラメーターにアクセスします。

foo: {{ request.GET.foo }}
于 2012-02-14T13:12:02.493 に答える
2

私もこれを理解しようとしていましたが、簡単な解決策は次のように使用することです。

from django.contrib import messages

get_success_url(self)で次のように書くことができます

def get_success_url(self)
    messages.add_message(self.request, messages.SUCCESS, 'Contact Successfully Updated!')
    return reverse('contacts:contact_detail', args=(self.get_object().id,))

テンプレートでは、次の方法でこのメッセージにアクセスできます。

{% for message in messages %}
    {{ message }}
{% endfor %}
于 2015-01-08T01:01:02.030 に答える
1

探していることを達成する1つの方法は、セッションを使用することです。必要な値をユーザーのセッションオブジェクトに保存し、SuccessView内からそれらにアクセスします。詳細については、 Djangoセッションのドキュメントを確認してください。

于 2012-02-13T22:35:05.303 に答える