2012-04-05 23 views
14

que tienen un querydict que se parece a lo siguiente:artículos Extracción De un QueryDict

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

¿cómo iba a extraer a cabo id?

He intentado hacer queryDictExample.get("id"), pero no funcionó.

+5

fijar la aplicación del lado del cliente que está dando como resultado el objeto roto en primer lugar. –

+0

¿Cómo puedo volver a crear su variable? No estoy familiarizado con la sintaxis de hits. – octopusgrabbus

Respuesta

35

Parece que su cliente es la publicación de JSON en lugar de formencoded datos. En lugar de tener acceso a request.POST, use request.body (request.raw_post_data en las versiones 1.3 o menos) y use json.loads() para convertir a un dict.

+0

me salvaste el día :) – Ron

+1

Muchas gracias amigo. Me salvaste el culo – Volatil3

5

Quizás esto no se aplique por completo a usted. Pero cuando busqué esto, tu pregunta fue la primera pregunta de Stackoverflow.

Solo quería obtener datos POST básicos en Django. Entonces, solo usar GET funcionó bien para mí. Como dijeron los otros, podría ser más fácil formatear mejor cualquier script que esté creando la consulta.

Básicamente tengo un AJAX hacer un post hacia Django, el puesto se ve un poco como esto:

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

entonces en mi view.py, lo hice

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) 

La salida de ALLDATA era:

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

y los comandos Get dar

name: name 
data: abcdefg 
+0

¡¡¡OMG !! He estado wrasslin 'con esto desde ayer. ¡Gracias! –

2

Esto funciona para varios valores:

dict(MyDict.lists()) 

teclas son Dict consulta vars, y los valores dict son listas de valores de consulta.

1

Puede usar - request.data.get("content") Esto le dará los datos directamente si está en el extremo delantero (jQuery, Angular) NO ha usado JSON.stringify(data).

0

éste funciona también para los valores que están listas:

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