2011-12-07 12 views
5

Bir blog uygulaması yapıyorum ve formu işledikten sonra farklı bir farklı URL'ye yönlendirmek istiyorum, ancak aşağıda verilen görünüm çalışmaz. Ben ne HttpResponseRedirect kullanmak ne de basitçeNoReverseMatch hatası alma formunu işledikten sonra farklı bir görünüme nasıl yönlendirilir

@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) 

Sadece render_to_response kullanmak Ancak o zaman çalışıyor, ama bu üstündeki url değişmez yönlendirmek kuramıyorum. İstediğim, kullanıcıyı gönderiyi yayınladıktan sonra yeni bir sayfaya yönlendirmek ve aynı zamanda üstteki URL'yi de değiştirmek istiyorum. HttpResponseRedirect kullanma

cevap

7

gitmek yoludur, ancak ters bağlantılı olarak kullanan gerekir: size yardımcı oluyor o

from django.core.urlresolvers import reverse 

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

Umut.

+0

Teşekkürler çok ... aslında bu verdiğiniz belgelerin iade HttpResponseRedirect (ters ('polls.views.results', args = (p.id,))) ve bu da bir hata atar ... Teşekkürler Yardım için bir çok – Sachin

+0

Rica ederim. Geriye dönük URL kalıpları hassas olabilir. – Brandon

İlgili konular