我有一个详细信息页面/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中附加每个参数.分开获取,但我不确定这是最好的方法.
我的目标是保留初始输入数据,以便用户在登录并重新登录到空间详细信息页面后不必再次输入它.出于转换的原因,我不想强制用户在输入初始表单数据之前登录.
编辑:
我使用的是在登录和注册按钮上设置href
的Java脚本:
const onClick = () => {
let prodId = document.getElementById('productId').value;
let startDate = document.getElementById('startDate').value;
let duration = document.getElementById('duration').value;
const url = new URL(window.location.href);
url.searchParams.set('product_id', prodId);
url.searchParams.set('start_date', startDate);
url.searchParams.set('duration', duration);
window.history.replaceState(null, null, url);
const queryString = window.location.search;
document.getElementById('login').href = `{% url 'login' %}?next={{request.path}}${queryString}`;
document.getElementById('register').href = `{% url 'register' %}?next={{request.path}}${queryString}`
}