0

成功した送信を特定のページにリダイレクトする必要があります。

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

)

レストランが作成されたら、次のように、この URL のプレビュー ページにリダイレクトします (スラッグが「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 を使用しますか?)。リダイレクトを正しく行う方法についてのアイデアはありますか?

4

1 に答える 1

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)
于 2012-09-22T04:54:24.287 に答える