如何在Django中提交表单后使用kwargs重定向到上一个视图?

时间:2015-06-22 16:52:06

标签: python django forms views

我有一个标准的基于Django类的FormView,在成功调用form_valid时调用了一个重写的get_success_url方法。

这是目前的get_success_url方法:

def get_success_url(self):
    """Redirect to same view for message flashing"""
    return reverse(
        'manage_property',
        kwargs={'slug': self.kwargs['property_slug']}
    )

用户将从至少三个不同的视图到达我的表单。我想将它们重新定向到他们从适当的kwargs传递开始的视图。

例如,一个用户可能从这里开始:

url(r'^properties/(?P<property_slug>[-\w]+)/leads/(?P<offer_pk>[\d]+)/$',
    "manage_property_lead", name="manage_property_lead"),

到达这里:

url(
    r'^properties/(?P<property_slug>[-\w]+)/send-email/$',
    SendEmail.as_view(),
    name='send_email'
),

但他们也可能从这里开始:

url(r'^properties/(?P<slug>[-\w]+)/offers/(?P<pk>[\d]+)/$',
    'manage_property_offer', name='manage_property_offer'),

Django的最佳做法是什么,以确保我有成功提交表单后将其发送回相应视图所需的内容?

谢谢!

1 个答案:

答案 0 :(得分:0)

在处理表单的视图中,您可以从request.META['HTTP_REFERER]'获取引用视图/页面(如果有)的值。

def form_view(request):
    redirect_url = request.META.get('HTTP_REFERER', None) or '/'
    if form.is_valid():
        return HttpResponseRedirect(redirect_url)