2012-09-22 36 views
0

我需要将成功提交重定向到特定页面。如何使用反向URL正确重定向

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

一旦餐厅被创建,我想它重定向到预览页面到这个网址(假设是鼻涕虫 '的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('/') 

我需要更改上面的代码的最后一行。现在,我可以破解它来附加一些字符串和重定向,但我该如何以正确的方式做到这一点(使用命名的网址或反向网址?)。关于如何正确重定向的任何想法?

+2

URLconf中没有任何参数。 –

回答

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) 
+0

使用['redirect'](http://django.me/redirect) - '返回重定向('restaurant_preview',slug = obj.slug)' –

+1

我更新了我的答案以使用重定向 –