【问题标题】:How to remove key from request QueryDict in Django?如何从 Django 中的请求 QueryDict 中删除密钥?
【发布时间】:2015-04-07 13:31:06
【问题描述】:

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

【问题讨论】:

    标签: python django


    【解决方案1】:

    即使您可以从 querydict 中删除该值,这也无济于事,因为它基于您用来请求该视图的 URL,因此当您刷新时,您将再次使用相同的 URL与现有参数。

    而是在GET参数中传递消息值,放到会话中,在索引视图中使用request.session.pop('message')

    更好的是,使用内置的messages framework 为您完成所有这些工作。

    【讨论】:

      【解决方案2】:

      @Daniel Rosemans 的回答是正确的,因为您应该使用 session 来存储价值。

      但是,要回答您关于如何删除的原始问题,GET 和 POST 参数是不可变的。您不能更改这些查询字典。如果您想从中删除某些内容(例如,为了防止密钥被迭代),您需要复制 QueryDict 然后从中弹出项目。

      https://docs.djangoproject.com/en/3.1/ref/request-response/#querydict-objects

      在 request.POST 和 request.GET 的 QueryDicts 将是不可变的 在正常的请求/响应周期中访问。获取可变版本 您需要使用 QueryDict.copy()。

      【讨论】:

        猜你喜欢
        • 2022-01-16
        • 2011-10-07
        • 1970-01-01
        • 1970-01-01
        • 2011-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多