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

How to redirect to previous view with kwargs after form submit in Django?

我有标准的基于 Django class 的 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 中的最佳做法是什么,以确保在成功提交表单后,我拥有将它们发送回适当视图所需的内容?

谢谢!

在处理表单的视图中,您可以从 request.META['HTTP_REFERER]'.

中获取引用 view/page(如果有)的值
def form_view(request):
    redirect_url = request.META.get('HTTP_REFERER', None) or '/'
    if form.is_valid():
        return HttpResponseRedirect(redirect_url)