2011-12-07 22 views
5

Tôi đang tạo ứng dụng blog và tôi muốn chuyển hướng đến một url khác sau khi tôi đã xử lý biểu mẫu, tuy nhiên chế độ xem được cung cấp dưới đây không hoạt động. Tôi không thể sử dụng không HttpResponseRedirect cũng không chỉ đơn giản là chuyển hướngCách chuyển hướng đến một chế độ xem khác sau khi xử lý biểu mẫu nhận lỗi 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) 

Tuy nhiên nếu tôi chỉ sử dụng render_to_response sau đó nó hoạt động tốt, nhưng điều đó không thay đổi url ở đầu trang. Những gì tôi muốn là chuyển hướng người dùng đến một trang mới sau khi xuất bản bài đăng và tôi cũng muốn thay đổi url ở trên cùng.

Trả lời

7

Sử dụng HttpResponseRedirect là con đường để đi, nhưng bạn cần phải sử dụng kết hợp với ngược lại:

from django.core.urlresolvers import reverse 

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

Hy vọng rằng sẽ giúp bạn ra ngoài.

+0

Cảm ơn rất nhiều .. thực sự họ đã đưa ra điều này là trong tài liệu trả về HttpResponseRedirect (đảo ngược ('polls.views.results', args = (p.id,))) và điều này cũng ném lên một lỗi ... Cảm ơn rất nhiều cho sự giúp đỡ – Sachin

+0

Bạn đang chào đón. Việc đảo ngược các mẫu URL có thể khó hiểu. – Brandon