当您想要将用户返回到Django中的同一页面时,有哪些选项?每个人的优缺点是什么?
我知道的方法:
还有其他吗?
答案 0 :(得分:99)
其中一种方法是使用HTTP_REFERER
标题,如下所示:
from django.http import HttpResponseRedirect
def someview(request):
...
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
不确定是否有这个缺点!
答案 1 :(得分:8)
虽然问题和答案都很陈旧,但我认为它缺少一些选择。我没有找到任何方法的缺点,我很乐意知道是否有?
from django.shortcuts import redirect
redirect(request.path_info) # No query parameters
redirect(request.build_absolute_uri()) # Keeps query parameters
redirect(request.get_full_path()) # Keeps query parameters
答案 2 :(得分:0)
100%工作示例
对于基于类的视图和功能:
from django.http import HttpResponseRedirect
...
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
或
from django.http import HttpResponseRedirect
...
return HttpResponseRedirect(self.request.META.get('HTTP_REFERER'))
示例-
class TaskNotificationReadAllView(generic.View):
def get(self, request, *args, **kwargs):
TaskNotification.objects.filter(assigned_to=request.user).update(read=True)
print(request.META.get('HTTP_REFERER'))
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
答案 3 :(得分:0)
在django视图中,假设您尚未登录,但单击某些内容会触发某些网址,例如/ board / 2 / new_topic,那么@login_required会将您重定向到使用该网址的登录页面
http:// localhost:8000 / signin /?next = / boards / 2 / new_topic /
所以我们的目标是成功登录后重定向到http:// localhost:8000 / boards / 2 / new_topic /页面,所以我们必须添加一行
if 'next' in request.GET:
return redirect(request.GET['next'])
然后,如果下一个存在,它将根据其他正常重定向进行重定向。
Views.py:
def signin(request):
if request.method == "POST":
user_login_form = UserLoginForm(request.POST)
email = request.POST['email']
password = request.POST['password']
user = authenticate(request, email=email, password=password)
if user and user.is_active:
login(request, user)
if 'next' in request.GET:
return redirect(request.GET['next'])
else:
return redirect('home')
else:
return render(request, 'signin.html', context={'form': user_login_form})
else:
user_login_form = UserLoginForm()
return render(request, 'signin.html', context={'form': user_login_form})