将Url params从一个页面传递到另一个页面

时间:2017-09-07 22:25:11

标签: javascript python django url

所以我在页面上有一个显示分页结果的过滤器表单。目前,当您使用get请求应用过滤器设置时,一切正常,但是当您尝试切换页面时,它会重置。我曾想过使用下面的脚本将URL从一个页面传递到另一个页面。这会复制网址,但实际上并没有更改网页,只是复制字符串。您可以在下面的网址中看到网址确实更改了网页,但实际网页无论网址如何都会保留在第一页上。我正在使用Django和Django过滤器。也许有一个更好的jQuery解决方案,任何建议?

脚本

document.querySelectorAll('.fqs')
    .forEach((el) => el.attributes.href.value += window.location.search);

地址

没有脚本:

/relations/?createdBy=&occursIn=&createdAfter=&createdBefore=&terminal_nodes=&project=1

使用脚本:

/relations/?page=2?createdBy=&occursIn=&createdAfter=&createdBefore=&terminal_nodes=&project=1

下一页链接

<a class="fqs" href="?page={{ relations.next_page_number }}">Next &raquo;</a>

按下上一个按钮时的URL

?page=1&page=2&createdBy=&occursIn=&createdAfter=&createdBefore=&terminal_nodes=&project=1

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您将添加分页服务器端?page={{...}},并通过js添加已存在的url参数。

结果网址中有两个?,其中可能是链接无法为您提供正确网页的原因。

location.search包含?,因此要将其添加到您的?page = x,您必须将?替换为&

document.querySelectorAll('.fqs')
    .forEach((el) => el.attributes.href.value += window.location.search.replace("?", "&"));

编辑:如果这样可行,它可能会停止在下一页上工作,因为location.search会包含page=x,提供重复的页面查询参数。

要从location.search过滤掉页面参数,您可以执行以下操作:

document.querySelectorAll('.fqs')
  .forEach((el) => {
    var params = window.location.search.replace("?", "&").split("&");
    params = params.filter((v) => v.indexOf("page") == -1).join("&");
    el.attributes.href.value += params;
  });
顺便说一句,请注意,箭头功能在IE11等传统浏览器中不起作用。

答案 1 :(得分:0)

为了实现这一点,我决定不使用任何javascript并使用python代替。我添加了

/

到我看来。它复制params,然后删除param匹配页面并在上下文中进行编码。