【发布时间】:2019-06-14 19:34:54
【问题描述】:
当用户在未登录的情况下访问应用程序的 URL 时,我试图重定向到根 URL。
我尝试了两种方法:
- 使用装饰器
@login_required(login_url = '')
def index(request):
return render(request, 'professors/index.html')
返回 404 错误,说明当前路径为
accounts/login
- 将根页面的
views传递给redirect
def index(request):
if request.user.is_authenticated:
return render(request, 'professors/index.html')
else:
return redirect('login.views.index')
返回 404 错误,说明当前路径为
professors/login.views.index
根 URL 是 localhost:8000/,当用户未登录时,我在访问 localhost:8000/professors/ 后尝试重定向到它。
这个问题与我在这里发现的类似:Django redirect to root from a view
但是,应用该解决方案对我不起作用。看起来当从应用程序的视图重定向到根目录时,它重定向到的根目录是应用程序的根目录,而不是网站的根目录,这对于访问应用程序 URL 后重定向的任何 URL 都是如此。例如,如果根 URL 是 localhost:8000 而应用程序的 URL 是 localhost:8000/professors/,那么尝试从后者访问任何其他 URL,将意味着 localhost:8000/professors/ 是起点,我在 login_url 中写的内容或redirect(redirect_URL) 被添加到那,这意味着我不能再访问localhost:8000
最后说明:
当我在else 中尝试return redirect ('') 时,它返回了
NoReverseMatch 在 /professors/
找不到''的反向。 '' 不是有效的视图函数或模式名称。 这说明起点又是从
localhost:800/professors/
【问题讨论】:
标签: django