如何从Django中的请求QueryDict中删除密钥?

时间:2015-04-07 13:31:06

标签: python django

这是我的一个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中删除密钥?

2 个答案:

答案 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()。