Как выглядит шаблон вашей формы входа?
Ваша проблема
Вы не отправляете путь redirect_to
к шаблону, и вы должны это сделать. Ваше возвращение должно выглядеть так:
return render_to_response('blogs.html', {
'formL': formL,
'next': redirect_to,
}, context_instance=RequestContext(request)
)
Действие формы входа должно выглядеть следующим образом:
<form action="/your_login_url/?next={{ next }}" method="post">
Поэтому, когда вы переходите на /myblog/
, вы перенаправляетесь на /your_login_url/?next=/myblog/
, представление входа в систему затем отображает форму входа в систему и заменяет переменную next
в атрибуте действия формы входа в систему, чтобы она выглядела как /your_login_url/?next=/myblog/
и при отправке форма, в которую вы вошли и перенаправлены на /myblog/
(материал после if request.method == 'POST':
будет выполнен).
На ваш взгляд, redirect_to = request.REQUEST.get("next")
отлично работает, когда вы только GET
страница входа, но когда вы POST
открываете ее, в GET не устанавливается переменная next
.
Также обратите внимание
Просмотр логина не должен отображать ваш блог, просмотр блогов должен это делать.
Так выглядит возвращенный ответ Django, обратите внимание на строку, где написано redirect_field_name: redirect_to,
, redirect_field_name
имеет значение next
по умолчанию.
return render_to_response(template_name, {
'form': form,
redirect_field_name: redirect_to,
'site': current_site,
'site_name': current_site.name,
}, context_instance=RequestContext(request))
И, похоже, вы переопределяете представление входа в систему только для перенаправления по умолчанию? Это не правильно ИМХО.
Правильное место для установки местоположения по умолчанию для перенаправления входа в систему находится в вашем файле settings.py путем установки LOGIN_REDIRECT_URL .
Но, поскольку вы пишете свой собственный вид входа в систему, почему бы не использовать тот, что в django, в качестве каркаса, а затем расширить на нем то, что вам нужно.