如何使用反向URL正确重定向

时间:2012-09-22 02:54:39

标签: django

我需要将成功提交重定向到特定页面。

urlpatterns = patterns('',
url(r'create/$', RestaurantCreate.as_view(), name='restaurant_create'),
url(r'preview/$', RestaurantPreview.as_view(), name='restaurant_preview'),

创建餐厅后,我想将其重定向到此网址的预览页面(假设slug是'applebees'),如下所示:

http://127.0.0.1/restaurant/applebees/preview

这是我的RestaurantCreate课程:

class RestaurantCreate(CreateView):    
form_class = RestaurantForm
template_name = 'restaurant_form.html'
success_url = 'success'
model = Restaurant

def form_valid(self, form):
    obj = form.save(commit=False)
    obj.slug = unique_slug(obj.name, Restaurant)
    obj.created_by = self.request.user
    obj.save()
    return HttpResponseRedirect('/')

我需要更改上面代码的最后一行。现在,我可以破解它附加一些字符串并重定向,但我如何以正确的方式执行此操作(使用命名的url或反向url?)。关于如何正确重定向的任何想法?

1 个答案:

答案 0 :(得分:1)

你的URLconf应该是这样的

urlpatterns = patterns('',
    url(r'^create/$', RestaurantCreate.as_view(), name='restaurant_create'),
    url(r'^(?P<slug>[-\w]+)/preview/$', RestaurantPreview.as_view(), name='restaurant_preview'),
)

您可以使用django.shortcuts.redirect

from django.shortcuts import redirect
def form_valid(self, form):
    obj = form.save(commit=False)
    obj.slug = unique_slug(obj.name, Restaurant)
    obj.created_by = self.request.user
    obj.save()
    return redirect('restaurant_preview', slug=obj.slug)