【问题标题】:How to remove get parameter from url in django view如何在 django 视图中从 url 中删除 get 参数
【发布时间】:2013-10-07 00:23:41
【问题描述】:

我有以下看法:

def copy_group(request):
    copy = request.GET.get('copy','')

    if copy:
        #do my copy process

    context = {'view':'copy-view'}
    return render(request, 'groups/copy-view.html', context)

这使用以下 URL mysite.com/groups/?copy=1 调用

问题是,如果我刷新页面,我的进程会一遍又一遍地复制。

如何删除 ge 参数,以便 url 在复制后返回: mysite.com/groups/

我尝试在我的视图代码中插入这个:

request.GET.pop('copy')

但我得到错误:这个 QueryDict 实例是不可变的

【问题讨论】:

  • 我认为你做错了,如果请求修改服务器上的数据,它必须是 POST,而不是 GET
  • 恭喜

标签: django django-views django-urls http-get url-parameters


【解决方案1】:

如果我理解得很好,一旦你完成了复制,你希望页面被重定向,这样就不会再复制了。然后这样做:

...
if copy:
    the actual copy and then...
    return HttpResponseRedirect(redirect_to='/the-path-without-copy-parameter/')
...

然后你可以改进你的代码:

  • 添加copy作为实际路由参数,def copy_group(request, copy=None)
  • 在 redirect_to 中生成路径而不是硬编码
  • 题外话:如果没有,请为其添加功能测试:)

顺便说一句,我不知道你为什么使用 Get 参数,而不仅仅是一个不同的 URL??

【讨论】:

    【解决方案2】:

    我最终改为进行重定向。这将删除 get 参数。

    【讨论】:

      猜你喜欢
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 2020-04-19
      • 2013-10-21
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      相关资源
      最近更新 更多