当您希望将用户返回到 Django 中的同一页面时,有哪些选项,每个选项的优缺点是什么?
方法我知道:
还有别的吗?
其中一种方法是使用 HTTP_REFERER头文件,如下所示:
HTTP_REFERER
from django.http import HttpResponseRedirect def someview(request): ... return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
不知道这个的弊端!
虽然这个问题和答案已经过时了,但是我认为它缺少一些选择。我没有发现任何与方法的弊端,我会很高兴地知道,如果有任何?
Build _ final _ uri ()
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
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'))
在 django 视图中,假设您没有登录,但是单击某些内容触发一些 URL,比如/board/2/new _ subject,然后@login _ need 会将您重定向到带有此 URL 的登录页面
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'])
然后如果它下一个在那里,那么它将重定向根据其他正常的重定向。
视图:
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})