我可以让 Django QueryDict 保留顺序吗?

2024-03-30

是否可以使 Django 的 QueryDict 保留原始查询字符串的顺序?

>>> from django.http import QueryDict
>>> q = QueryDict(u'x=foo³&y=bar(potato),z=hello world')
>>> q.urlencode(safe='()')
u'y=bar(potato)%2Cz%3Dhello%20world&x=foo%C2%B3'

QueryDict https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict继承自DjangoMultiValueDict https://github.com/django/django/blob/stable/1.7.x/django/utils/datastructures.py#L282它继承自dict这是作为哈希表实现 https://stackoverflow.com/a/526131/3096768。因此,您不能保证它会保持有序。

我不确定这是否与您的需求相关,但是QueryDict 保留的顺序是传递给它们的“列表”(同一键的多个值)的顺序 https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict.lists。使用这个,你可以这样做:

>>> from django.http import QueryDict
>>> q = QueryDict(u'x=foo³&x=bar(potato),x=hello world')
>>> q.lists()
[('x', ['foo³', 'bar(potato)', 'hello world'])]
>>> q.urlencode(safe='()')
u'x=foo%C2%B3&x=bar(potato)&x=hello%20world'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以让 Django QueryDict 保留顺序吗? 的相关文章

随机推荐