Перенаправление на следующий url с дополнительными параметрами с помощью LoginView
У меня есть детальная страница /spaces/<int:pk>/, на которой неаутентифицированный пользователь может ввести данные формы.
После отправки формы эти данные добавляются к url следующим образом:
/spaces/<int:pk>/?product_id=1&start_date=2022-12-23&duration=1
Затем пользователю предлагается войти в систему или зарегистрироваться, чтобы продолжить. При нажатии кнопки "Войти", url страницы подробной информации добавляется в качестве следующего параметра к url входа.
/login/?next=/spaces/1/?product_id=14&start_date=2022-12-23&duration=1
Однако, после входа в систему и перенаправления обратно на детальную страницу, url выглядит следующим образом:
/spaces/1/?product_id=14
Это происходит потому, что при разборе url разделяется на &, поэтому start_date и duration рассматриваются как отдельные параметры.
Единственное решение, которое я могу придумать, это переопределить LoginView.get_redirect_url и добавить каждый параметр из self.request.GET отдельно, но я не уверен, что это лучший подход в данном случае.
Моя цель - сохранить исходные данные, чтобы пользователю не пришлось вводить их снова после входа в систему и возвращения на страницу детализации помещения. По причинам конверсии я не хочу заставлять пользователя входить в систему перед вводом начальных данных формы.
Вам нужно правильно закодировать строку запроса (и путь), так:
const queryString = encodeURIComponent(window.location.search);
document.getElementById('login').href = `{% url 'login' %}?next={{ request.path|urlencode }}${queryString}`;
document.getElementById('register').href = `{% url 'register' %}?next={{ request.path|urlencode }}${queryString}