这是我的一个Django观点:
def index(request):
message = request.GET.get('message', '')
context = RequestContext(request, {
'message': message
})
return render(request, 'bets/index.html', context)
我的目标是只在模板中显示一次消息,而不是在页面重新加载时显示它。我试过这个:
request.GET['message'] = ''
但是得到错误"这个QueryDict实例是不可变的"。如何从QueryDict中删除密钥?
答案 0 :(得分:4)
即使您可以从querydict中删除该值,这也无济于事,因为它基于您用于请求该视图的URL,因此当您刷新时,您将再次使用相同的URL使用现有参数。
而是在GET参数中传递消息值,将其放入会话中,并在索引视图中使用request.session.pop('message')
。
更好的是,使用内置的messages framework来完成所有这些工作。
答案 1 :(得分:0)
@Daniel Rosemans的答案是正确的,因为您应该使用会话来存储价值。
但是,要回答有关如何删除的原始问题,GET和POST参数是不可变的。您不能更改这些querydict。如果要从其中删除某些内容(例如,以防止键被迭代),则需要制作QueryDict的副本,然后从中弹出项目。
https://docs.djangoproject.com/en/3.1/ref/request-response/#querydict-objects
request.POST和request.GET处的QueryDicts在以下情况下将不可变 以正常的请求/响应周期访问。获得可变版本 您需要使用QueryDict.copy()。