如何在 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)
我有标准的基于 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]'
.
def form_view(request):
redirect_url = request.META.get('HTTP_REFERER', None) or '/'
if form.is_valid():
return HttpResponseRedirect(redirect_url)