【问题标题】:Django: Redirect to the previous page and keep the scroll positionDjango:重定向到上一页并保持滚动位置
【发布时间】:2018-09-09 05:29:24
【问题描述】:

我已经看到this 的问题,您可以使用以下方式重定向到上一页:

return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

但是有没有办法也保持滚动位置?以上内容重新加载页面。

【问题讨论】:

  • 一种方法是在重定向网址中使用#id,也称为ancre
  • @GrandGTO 滚动位置可能没有在那里定义锚

标签: django django-views


【解决方案1】:

经过一番折腾,这就是我想出的(在this的帮助下回答):

from django.http import HttpResponse

def myview (request):
  ..
  ..
  return HttpResponse('<script>history.back();</script>')

另外,请记住history.back() 不会“重新加载”页面。要重新加载页面,我们必须使用location.reload(),它也保持滚动位置,但我们必须巧妙地使用它,以免它进入无限循环。所以这就是我为解决它所做的(如this聪明的回答中提到的)

<input type="hidden" id="refreshed" value="false">
<script type="text/javascript">
    $(window).load(function(){
        if ($('#refreshed').val() == "false") {
          $('#refreshed').val("true"); 
        }
        else {
          $('#refreshed').val("false");
          location.reload();
        }
      });
</script>

注意:以上使用的是隐藏输入字段,因为当调用“返回”时,输入字段的状态会保留。

综上所述,如果在您的用例中效果更好,您可能需要考虑执行 Ajax 调用,而不是执行上述操作。

【讨论】:

  • 这是一个很酷的技巧,但缺点是它会污染您的前进/后退历史记录,而前向条目不应该是一个。
猜你喜欢
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 2012-04-25
  • 2020-02-29
相关资源
最近更新 更多