Django: перенаправить на предыдущую страницу * со строкой запроса * после входа в систему - PullRequest
11 голосов
/ 29 июня 2011

Я использую django.contrib.auth и хотел бы перенаправить на предыдущую страницу после входа в систему. Мне хотелось бы что-то вроде следующего: Django: Перенаправление на предыдущую страницу после входа в систему , за исключением перенаправленный URL может содержать строку запроса.

В настоящее время у меня есть следующая ссылка в моем шаблоне:

<a href="{% url user_login %}?next={{ request.get_full_path }}">Login</a>

user_login - это имя моего вида входа в систему.

Я хотел бы использовать {{ request.get_full_path }} вместо {{ request.path }} для получения текущего пути, включая строку запроса, но это создаст URL со строкой запроса в строке запроса (например, /login/?next=/my/original/path/?with=other&fun=query&string=parameters), который не работает.

Я также попытался добавить аргумент redirect_to в свое представление входа в систему и передать URL со строкой запроса в качестве аргумента тегу шаблона url.Однако это дает мне ошибку NoReverseMatch.

1 Ответ

11 голосов
/ 29 июня 2011

Как насчет экранирования параметров get и последующего их кавычки в представлении?

HTML

<a href="{% url user_login %}?next={{ request.get_full_path|urlencode }}">Login</a>

вид входа в систему

if successful_login:
    url_with_get = urllib2.unquote(request.GET.get('next'))
    return http.HttpResponseRedirect(url_with_get)

PS: я много раз сталкивался с вашим блогом в поисках помощи по PIP :)

...