Skip to content
QueryString parser for Python/Django that correctly handles nested dictionaries
Latest commit 2d7bec9 Jan 7, 2016 @bernii badge update for rst
Failed to load latest commit information.
querystring_parser python 3.3 support as poposed in PR#25 by @brettatoms Jan 7, 2016
.travis.yml Add: Python 3.3 Travis CI target Aug 28, 2015
README.rst version bump and badge update Jan 7, 2016



This repository hosts the query string parser for Python/Django projects that correcly creates nested dictionaries from sent form/querystring data.

When to use it?

Lets say you have some textfields on your webpage that you wish to get as dictionary on the backend. The querystring could look like:


Standard django REQUEST (QueryDict) variable will contain:

<QueryDict: {u"section[1]['words'][2]": [u'a'], u"section[0]['words'][2]": [u'a', u'b']}>

As you see it doesn't really convert it to dict. Instead of elegant dictionary you have a string called "section[1]['words'][2]" and "section[0]['words'][2]" and if you want to do something with it, you'll need to parse it (sic!).

When using querystring-parser the output will look like:

{u'section': {0: {u'words': {2: [u'a', u'b']}}, 1: {u'words': {2: u'a'}}}}

Tadam! Everything is much simpler and more beautiful now :)


Test made using timeit show that in most cases speed of created library is similar to standard Django QueryDict parsing speed. For query string containing multidimensional complicated arrays querystring-parser is significantly slower. This is totally understandable as created library creates nested dictionaries in contrary to standard Django function which only tokenizes data. You can see results below. Edit: Actually parsing is done by urlparse.parse_qs so I've added it to tests.

Test string nr  querystring-parser     Django QueryDict       parse_qs
0               2.75077319145          3.44334220886          0.582501888275
Test string nr  querystring-parser     Django QueryDict       parse_qs
1               10.1889920235          10.2983090878          2.08930182457
Test string nr  querystring-parser     Django QueryDict       parse_qs
2               0.613747119904         1.21649289131          0.283004999161
Test string nr  querystring-parser     Django QueryDict       parse_qs
3               0.107316017151         0.459388017654         0.0687718391418
Test string nr  querystring-parser     Django QueryDict       parse_qs
4               0.00291299819946       0.169251918793         0.0170118808746

Test #1 Is most interesting as is contains nested dictionaries in query string.

How to use:

Just add it to your Django project and start using it.

from querystring_parser import parser
post_dict = parser.parse(request.POST.urlencode())


  • MIT License
Something went wrong with that request. Please try again.