Próbuję zbudować prostą stronę internetową z funkcjonalnością logowania bardzo podobną do tej tutaj na SO. Użytkownik powinien mieć możliwość przeglądania witryny jako użytkownik anonimowy, a na każdej stronie będzie znajdował się link do logowania. Po kliknięciu łącza logowania użytkownik zostanie przeniesiony do formularza logowania. Po pomyślnym zalogowaniu użytkownik powinien zostać przeniesiony z powrotem na stronę, z której w pierwszej kolejności kliknął link logowania. Zgaduję, że muszę jakoś przekazać adres URL bieżącej strony do widoku obsługującego formularz logowania, ale tak naprawdę nie mogę go uruchomić.
EDYCJA: Rozgryzłem to. Połączyłem się z formularzem logowania, przekazując bieżącą stronę jako parametr GET, a następnie użyłem „next”, aby przekierować na tę stronę. Dzięki!
EDYCJA 2: Moje wyjaśnienie nie wydawało się jasne, więc zgodnie z żądaniem jest mój kod: Powiedzmy, że jesteśmy na stronie foo.html i nie jesteśmy zalogowani. Teraz chcielibyśmy mieć link na foo.html, który zawiera linki to login.html. Tam możemy się zalogować, a następnie zostajemy przekierowani z powrotem do foo.html. Link na foo.html wygląda następująco:
<a href='/login/?next={{ request.path }}'>Login</a>
Teraz napisałem niestandardowy widok logowania, który wygląda mniej więcej tak:
def login_view(request):
redirect_to = request.REQUEST.get('next', '')
if request.method=='POST':
#create login form...
if valid login credentials have been entered:
return HttpResponseRedirect(redirect_to)
#...
return render_to_response('login.html', locals())
I ważny wiersz w login.html:
<form method="post" action="./?next={{ redirect_to }}">
Więc tak, to prawie wszystko, mam nadzieję, że to wyjaśnia.