我有以下看法:
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 参数。