bootstrap - django template set variable



Manejando la solicitud de Django. OBTENGA y múltiples variables para el mismo nombre de parámetro (2)

Desea la función getlist() del objeto GET:

request.GET.getlist('myvar')

https://ffff65535.com

En una vista de Django, etc., puede acceder a la solicitud. OBTENGA ['nombre de variable'] , de modo que en su vista puede volver a hacer algo como esto:

myvar = request.GET['myvar']

El tipo de objeto request.GET ['myvar'] real es:

<class 'django.http.QueryDict'>

Ahora, si quiere pasar múltiples variables con el mismo nombre de parámetro, es decir,

http://example.com/blah/?myvar=123&myvar=567

En otras palabras, desea que se devuelva una lista de Python para el parámetro myvar

Esencialmente, lo que me gustaría hacer es algo como esto

 for var in request.GET['myvar']:
     print var

Sin embargo, cuando intentas obtener el último valor pasado en la url, es decir, en el ejemplo anterior obtendrás 567

y el resultado en el shell será:

5
6
7

Sin embargo, cuando haces una impresión de request.GET, parece que tiene una lista, es decir:

<QueryDict: {u'myvar': [u'123', u'567']}>

Actualización Ok: está diseñado para devolver el último valor, mi caso de uso es que necesito una lista.

de django docs:

QueryDict. getitem (clave) Devuelve el valor de la clave dada. Si la clave tiene más de un valor, getitem () devuelve el último valor. Aumenta django.utils.datastructures.MultiValueDictKeyError si la clave no existe. (Esta es una subclase del KeyError estándar de Python, por lo que puede seguir capturando KeyError

QueryDict.getlist (clave) Devuelve los datos con la clave solicitada, como una lista de Python. Devuelve una lista vacía si la clave no existe. Se garantiza que devolverá una lista de algún tipo.

Actualización: si alguien sabe por qué el desarrollador de django ha hecho esto, por favor avíseme, parece contradictorio mostrar una lista y no se comporta como tal. ¡No muy pitónico!


Otra solución es crear una copia del objeto de solicitud ... Normalmente, no puede iterar a través de un objeto request.GET o request.POST, pero puede hacer tales operaciones en la copia:

res_set = request.GET.copy()
for item in res_set['myvar']:
    item
...




django-urls