2012-04-05 11 views
14

ho un QueryDict che è simile al seguente:Estrazione voci su un QueryDict

<QueryDict: {u'{"content":"aa","id":"1"}': [u'']}> 

Come dovrei estrarre fuori id?

Ho provato a fare queryDictExample.get("id"), ma non ha funzionato.

+5

fissare l'applicazione sul lato client che sta causando l'oggetto rotto prima. –

+0

Come posso ricreare la variabile? Non ho familiarità con la sintassi degli hit. – octopusgrabbus

risposta

35

Sembra che il tuo cliente sta postando JSON piuttosto che formencoded dati. Invece di accedere a request.POST, utilizzare request.body (request.raw_post_data nella versione 1.3 o inferiore) e utilizzare json.loads() per convertire in un dettato.

+0

hai salvato la mia giornata :) – Ron

+1

Grazie mille amico. Mi hai salvato il culo. – Volatil3

5

Forse questo non si applica completamente a voi. Ma quando ho cercato questo, la tua domanda è stata la prima domanda StackOverflow.

Volevo solo ottenere i dati POST di base in Django. Quindi usare GET ha funzionato bene per me. Come hanno affermato gli altri, potrebbe essere più semplice formattare meglio qualsiasi script stia creando la query.

Fondamentalmente ho un AJAX facendo un post verso Django, il POST sembra un po 'come questo:

params = name=somename&data=abcdefg 
http.send(params); 

poi nel mio view.py, ho fatto questo

def somefuntion(request): 
    if request.method == 'POST': 
     log.info('POST applied') 
     alldata=request.POST 
     log.debug(alldata) 
     data = alldata.get("data", "0") 
     name = alldata.get("name", "0") 
     log.info("POST name: " + name) 
     log.info("POST data: " + data) 

L'uscita del alldata era:

<QueryDict: {u'data': [u'abcdefg'], u'name': [u'somename']}> 

ei comandi ottengono dare

name: name 
data: abcdefg 
+0

OMG !! Ero stato wrasslin 'con questo da ieri. Grazie! –

2

Questo funziona per più valori:

dict(MyDict.lists()) 

chiavi Dict sono di query VAR, e valori dict sono elenchi di valori di query.

1

Puoi usare - request.data.get("content") Questo ti darà i dati direttamente se in front-end (jQuery, Angolare) NON hai usato JSON.stringify(data).

0

questo funziona anche per i valori che sono liste:

dict_ = {k: qdict.getlist(k) if len(qdict.getlist(k))>1 else v for k, v in qdict.items()}