Django:我能从字典中创建一个QueryDict吗?

2024-04-18 08:38:57 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我的Django应用程序中有一本字典:

dict = {'a': 'one', 'b': 'two', }

现在我想轻松地创建一个从这个字典获取参数的urlencoded列表。当然,我可以遍历字典,对键和值进行urlencode编码,然后自己连接字符串,但必须有一种更简单的方法。我想使用一个QueryDict实例。QueryDict是dict的一个子类,所以它应该是可能的。

qdict = QueryDict(dict) # this does not actually work
print qdict.urlencode()

我怎样才能让第二行到最后一行工作呢?


Tags: django字符串应用程序编码列表参数字典one
3条回答

怎么样?

from django.http import QueryDict

ordinary_dict = {'a': 'one', 'b': 'two', }
query_dict = QueryDict('', mutable=True)
query_dict.update(ordinary_dict)

实际上,使用多值dict有点间接,但更符合逻辑。 这样,每个键的多个值就可以存储在QueryDict和.getlist方法中。

from django.http.request import QueryDict, MultiValueDict
dictionary = {'my_age': ['23'], 'my_girlfriend_age': ['25', '27'], }

qdict = QueryDict('', mutable=True)
qdict.update(MultiValueDict(dictionary))

print qdict.get('my_age')  # 23
print qdict['my_girlfriend_age']  # 27
print qdict.getlist('my_girlfriend_age')  # ['25', '27']

Python有一个用于将字典(任何映射对象)编码为查询字符串的内置工具

params = {'a': 'one', 'b': 'two', }

urllib.urlencode(params)

'a=one&b=two'

http://docs.python.org/2/library/urllib.html#urllib.urlencode

QueryDict将querystring作为其contstructor的第一个参数

def __init__(self, query_string, mutable=False, encoding=None):

q = QueryDict('a=1&b=2')

https://github.com/django/django/blob/master/django/http/request.py#L260

更新:在Python3中,urlencode有moved to urllib.parse

from urllib.parse import urlencode

params = {'a': 'one', 'b': 'two', }
urlencode(params)
'a=one&b=two'

相关问题 更多 >