2011-12-07 5 views
5

ブログアプリケーションを作成していますが、フォームを処理した後に別のURLにリダイレクトしたいと思っています。私はどちらもHttpResponseRedirectを使用したり、単純にNoReverseMatchエラーを受け取ったフォームを処理した後、別のビューにリダイレクトする方法

@login_required 
def blog_form(request,author_id=None,slug=None): 

    context_instance=RequestContext(request) 

    # This view will have a valid creator_id and slug field if the 
    # blog is being edited and in this case the creator and user should be same 
    if (author_id and slug): 
     author = User.objects.get(pk=author_id) 
     blog = get_object_or_404(Entry, creator = author, slug = slug) 
     if blog.creator != request.user: 
      raise HttpResponseForbidden() 

    # We set the user and created date and make a new object 
    else: 
     blog = Entry(creator=request.user,created_date=datetime.datetime.now()) 

    if request.method == 'POST': 

     #if the blog is not published 
     if 'save' in request.POST: 
      form = EntryForm(request.POST, instance = blog) 
      if form.is_valid(): 
       form.save() 

     elif 'publish' in request.POST: 
      blog.pub_date = datetime.datetime.now() 
      blog.status = 1 
      form = EntryForm(request.POST, instance = blog) 
      if form.is_valid(): 
       form.save() 
       #return HttpResponseRedirect ('view_blog',(),{'author_id':blog.creator.id,'slug' :blog.slug,}) 
       return redirect ('blogs', blog.creator.id, blog.slug) 
       #return render_to_response('blog/blog_view.html', {'blog': blog,},context_instance=RequestContext(request)) 

     elif 'preview' in request.POST: 
      form = EntryForm(request.POST, instance = blog) 
      if form.is_valid(): 
       form.save() 
       return render_to_response('blog/blog_view.html', {'blog': blog,},context_instance=RequestContext(request)) 

    else: 
     form = EntryForm(instance = blog) 

    return render_to_response('blog/blog.html', {'form':form}, context_instance) 

私はちょうどrender_to_response使用している場合しかし、それは正常に動作しますが、それは上部のURLを変更しませんリダイレクトすることができません。私が望むのは、投稿を公開した後にユーザーを新しいページにリダイレクトすることです。また、私はトップのURLも変更したいと思います。 HttpResponseRedirectを使用して

答えて

7

は、移動するための方法ですが、逆に連動していることを使用する必要があります。あなたを助け

from django.core.urlresolvers import reverse 

### your other code 
return HttpResponseRedirect(reverse('view_blog', args=(), 
    kwargs={'author_id': blog.creator.id,'slug': blog.slug})) 

希望。

+0

実際には、これはドキュメントにHttpResponseRedirect(reverse( 'polls.views.results'、args =(p.id))を返します)、これはエラーをスローします。ヘルプのためにたくさん – Sachin

+0

あなたは大歓迎です。 URLパターンを逆転させるのは厄介なことがあります。 – Brandon