2016-03-04 5 views
11

Çözümü bulamadığım bir sorunla karşılaşıyorum. Navbar'da bütün sayfalarda bulunan bir düğme var ve bazı içerikler oluşturmaktan sorumlu bir düğmedir. düğmesiyle bağlantılarPOST isteği sonrası Django'da önceki sayfaya nasıl yönlendirilir?

Görünüm:

def createadv(request): 
    uw = getuw(request.user.username) 
    if request.method =='POST': 
    form = AdverForm(request.POST, request.FILES) 
    if form.is_valid(): 
     form.instance.user = request.user 
     form.save() 
     return HttpResponseRedirect('/', {'username': request.user.username, 'uw': uw}) 
    args = {} 
    args.update(csrf(request)) 
    args['username'] = request.user.username 
    args['form'] = AdverForm() 
    args['uw'] = uw 
    return render_to_response('createadv.html', args) 

sen hep içeriği oluşturduktan sonra ana sayfaya '/' yönlendirme şimdi görebiliyorum ama yaratılmasını başlattı hangi sayfaya geri dönmek isterseniz içeriği. İstemci (özel/gizli tarayıcı penceresi kullanılarak, örneğin) yönlendirme bilgilerini gönderme disabled eğer bu çalışmaz

return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) 

Not:

cevap

19

Formunuza next alanını ekleyebilir ve request.path olarak ayarlayabilirsiniz. Formunuzu işledikten sonra, bu yolun değerine yönlendirebilirsiniz.

template.html

Bu de hatırlarsanız django.contrib.auth giriş formuna için ne yaptığını kabaca
<form method="POST"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="hidden" name="next" value="{{ request.path }}"> 
    <button type="submit">Let's Go</button> 
</form> 

views.py

next = request.POST.get('next', '/') 
return HttpResponseRedirect(next) 

.

<a href="{% url 'your_form_view' %}?next={{ request.path|urlencode }}">Go to my form!</a> 

template.html

<form method="POST"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="hidden" name="next" value="{{ request.GET.next }}"> 
    <button type="submit">Let's Go</button> 
</form> 
3

Sen HTTP_REFERER değerini kullanabilirsiniz. Böyle bir durumda /'a yönlendirilecektir.

+0

Ben isteği eklemek

some_page.html: Bir ara sayfadan geçen olursa

, sen sorgu dizesi yoluyla 'next' değer iletebilirsiniz HttpResponseRedirect .META.get ('HTTP_REFERER', '/'), ancak maalesef yardımcı olmadı. Bu durumda, gönderildikten sonra "createadv" sayfasında kalıyorum. – Oleg

+0

Aralarında ek bir yönlendirme olabilir. Form action = "..." etiketinde, "action ="/createadv/"' şeklinde bir eğik çizgi olduğundan emin olun. – Selcuk

+0

Bir formu POST ettiğinizde, formun gönderildiği sayfa olan "HTTP_REFERER" ifadeniz, bu durumda aslında aynı sayfa olur. –