如何在 django 视图中从 url 中删除 get 参数



我有以下看法:

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实例是不可变的

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

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

然后,您可以改进代码:

  • 添加副本作为实际路由参数,def copy_group(请求,复制=无
  • 在redirect_to中生成路径,而不是对其进行硬编码
  • 题外:如果没有功能测试,则为其添加功能测试:)

顺便说一句,我不确定为什么您使用 Get 参数而不仅仅是它的不同 URL?

我最终做了一个重定向。 这将删除 get 参数。

最新更新