当前位置: 首页 > 面试题库 >

如何在Django中处理具有针对同一参数的多个变量的request.GET

宓文斌
2023-03-14
问题内容

在Django视图中,你可以访问request.GET['variablename'],因此在视图中你可以执行以下操作:

myvar = request.GET['myvar']

实际的request.GET[‘myvar’]对象类型是:

<class 'django.http.QueryDict'>

现在,如果要传递具有相同参数名称的多个变量,即:

http://example.com/blah/?myvar=123&myvar=567

你想要list参数返回python myvar,然后执行以下操作:

for var in request.GET['myvar']:
    print(var)

但是,当你尝试仅获得url中传递的最后一个值时,即在上面的示例中,你将获得567,而在shell中的结果将是:

5
6
7

但是,当你打印request.GET它时,它似乎带有一个listie:

<QueryDict: {u'myvar': [u'123', u'567']}>

确定更新:它旨在返回最后一个值,我的用例是我需要一个列表。

来自Django文档:

QueryDict。getitem(键)返回给定键的值。如果键具有多个值,则 getitem()返回最后一个值。如果键不存在,则引发django.utils.datastructures.MultiValueDictKeyError。(这是Python标准KeyError的子类,因此你可以坚持捕获KeyError

QueryDict.getlist(key)以Python列表形式返回带有请求的键的数据。如果键不存在,则返回一个空列表。确保可以返回某种列表。

更新:如果有人知道django开发人员为什么这样做,请告诉我,显示列表似乎违反直觉,并且它的行为不像一个。不是很pythonic!


问题答案:

你需要GET对象的getlist()函数:

request.GET.getlist('myvar')


 类似资料:
  • 我有两个监听器,在将事件发布到eventbus时接受相同的参数。但即使接受相同的论点,这些听众的行为也不同。 用户按下执行按钮并想要触发,例如取消作业。 对于执行作业 用于取消作业 我的问题是,在将事件发布到eventbus时,如何触发特定的侦听器,或者它将调用这两个侦听器?

  • 我使用的是OpenGL,但我并不完全满意将每个三角形(或在我的例子中为四边形)的值传递给片段着色器的标准方法,即将它们分配给基本体的每个顶点,并将它们传递给顶点着色器,以推测不必要的插值(除非使用“flat”指令)在片段着色器中(也就是说,每个片段不变化)。 是否有某种方法可以存储每个三角形(或四边形)的值,这些三角形(或四边形)需要在片段着色器中访问,这样就不需要每个顶点的冗余副本?那么,这种方

  • 问题内容: 我正在构建一个Android应用程序,并且正在使用Square的Retrofit库进行短暂的网络调用。我是Java和Android的新手。到目前为止,我已经像这样构造了请求: 并这样称呼他们: 我需要实现一个接受可变数量(不超过10个左右)参数的请求。必须单独定义它们并传递null或为给定请求中不存在的传递一些东西,这很麻烦。有没有一种方法可以为请求定义接口,使其接受变量号或参数,并@

  • 我试图做一个函数,将多个变量比较为一个整数,并输出一个三个字母的字符串。我想知道是否有一种方法把它翻译成Python。所以说:

  • 我是Camunda的新手,没有找到任何教程或参考来解释如何实现以下目标: 当开始一个过程时,我希望用户在发票中添加任意数量的项目。在下一个用户任务中,所有这些项目及其数量都应该打印给批准数据的人。 我还不知道如何在一个过程和它的变量之间建立1:n的关系。我需要为每个项目启动子流程吗?或者我必须使用自定义Java对象吗?如果是这样,我如何从任务列表中将表单元素映射到这样的对象?

  • 问题内容: 假设我有一张桌子,看起来像这样: 因此,每种电子邮件/电话组合都是唯一的,但是您可能会拥有多个电子邮件地址,这些电子邮件地址具有不同的电话号码,反之亦然。这有点做作,但它反映了我的情况。 我想做这样的查询: 但是,我想一次做多对,所以不必做几个查询。将两对保持在一起也很重要,因为我不想退回不需要的错误的电话/电子邮件组合。 我可以做这样的事情,但是对于数百个值的可能性,查询将非常长。