2011-06-15 7 views
20

No puedo encontrar la sintaxis adecuada para hacer lo que quiero hacer. Quiero hacer algo si un par de nombre/valor no está presente. Aquí está el código en mi opinión:¿Cómo comprobar si existe un par nombre/valor al publicar datos?

if (!request.POST['number']): 
    # do something 

¿Cuál es la forma correcta de lograr algo como lo anterior? Obtengo un error de sintaxis cuando pruebo esto.

+1

Asumiendo que eres nuevo en Python, no solo en Django. Primero, 'request.POST' en Django es como un diccionario de Python * normal. Por lo tanto, debe averiguar * cuál es la sintaxis adecuada para probar la presencia de una clave en un diccionario *. Una vez que lo sepa, puede buscar en Google lo correcto y encontrar bastantes preguntas muy similares que ya se han hecho en StackOverflow (por ejemplo, http://stackoverflow.com/questions/1602934/what-is-a-good- way-to-test-if-a-key-exists-in-python-dictionary). – Tony

Respuesta

16

más lógica:

if not 'number' in request.POST: 

Python convención:

if 'number' not in request.POST: 

Ambos trabajan exactamente de la misma manera.

30

@Thomas le dio la forma genérica, pero hay un atajo para el caso particular de obtener un valor predeterminado cuando una clave no existe.

number = request.POST.get('number', 0) 

Esto es equivalente a:

if 'number' not in request.POST: 
    number = 0 
else: 
    number = request.POST['number'] 
2

Lo que he utilizado muchas veces es el siguiente en mi vista:

def some_view(request): 

    foobar = False 

    if request.GET.get('foobar'): 
     foobar = True 

    return render(request, 'some_template.html',{ 
     'foobar': foobar, 
    }) 

Luego, en mi plantilla que pueda utilice la siguiente sintaxis de URL para establecer foobar:

<a href="{% url 'view_name_in_urls' %}?foobar=True">Link Name</a> 

Además, desde que volvimos la variable foobar desde el punto de vista anterior, podemos utilizar eso en la plantilla con otros bloques lógicos (ideal para la navegación!):

<li class="nav-item"> 
    {% if foobar %} 
     <a class="nav-link active" .... 
    {% else %} 
     <a class="nav-link" .... 
    {% endif %} 
</li> 

espero que ayuda,

Cuestiones relacionadas