重定向/返回Django中的同一页面(上一页)?

Al *_*ndy 55 django django-views

当您想要将用户返回到Django中的同一页面时,有哪些选项以及每个页面的优缺点是什么?

方法我知道:

  • HTTP_REFERER
  • 包含先前URL的GET参数
  • 用于存储先前URL的会话数据

还有别的吗?

Roh*_*han 106

其中一种方法是使用HTTP_REFERER如下所示的标题:

from django.http import HttpResponseRedirect

def someview(request):
   ...
   return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Run Code Online (Sandbox Code Playgroud)

不确定这个的缺点!

  • 我认为如果没有设置request.META,重定向到站点的主页会更好:return HttpResponseRedirect(request.META.get('HTTP_REFERER','/')) (43认同)
  • 我认为最大的问题是许多用户/浏览器关闭了http_referer. (9认同)
  • 另一个问题是,如果在提交期间验证失败,并且用户必须更正某些文件并重新提交,则HTTP_REFERER将是表单的URL. (6认同)
  • 你知道关闭标题是多么困难吗?大多数用户不知道它是什么,更不用说如何关闭它.在Firefox和Chrome中,你必须_manually编辑首选项_(再次,没有多少人知道如何做到这一点); 在IE中你根本无法禁用它(它对于安全站点自动禁用). (3认同)
  • 如果您还想**保留其所在的滚动位置**,请参阅[此](/sf/answers/3469894011/)答案。 (2认同)

Huz*_*yed 17

100% 工作示例

对于基于类的视图和函数:

from django.http import HttpResponseRedirect
    ...
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Run Code Online (Sandbox Code Playgroud)

或者

from django.http import HttpResponseRedirect
    ...
    return HttpResponseRedirect(self.request.META.get('HTTP_REFERER'))
Run Code Online (Sandbox Code Playgroud)

例子 -

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'))
Run Code Online (Sandbox Code Playgroud)


Dan*_*man 11

虽然问题和答案都很陈旧,但我认为它缺少一些选择.我没有找到任何方法的缺点,我很乐意知道是否有任何?