erknrio
3/28/2017 - 2:13 PM

Python for tutorial.

Python for tutorial.

Introducción

Vamos a trabajar con formularios. Haciendo lo mismo de formas diferentes.

Objetivo del ejemplo

Mediante un doble bucle for queremos agrupar los inputs de un formulario según el atributo ordenamiento. Esto generará posteriormente varios fieldset dependiendo del ordenamiento deseado.

Contexto del ejemplo

Desde otra parte de la aplicación recibimos un objeto form con los siguientes atributos:

  • **fields:** es un listado de todos los campos que encontraremos en el formulario.

  • **ordenamiento:** es un listado que contiene varios listados dentro. Cada uno de estos listados corresponden a un fieldset del HTML.

Ejemplo común

En este ejemplo usaremos el típico doble bucle que se emplean en otros lenguajes como PHP o JavaScript.

def fieldset_form(form):
    """Funcion que devuelve el objeto form
    con los fieldsets del formulario HTML"""
    campos = []
    # Recorremos el primer nivel de ordenamiento,
    # donde encontramos todos los fieldsets
    for campos_fieldset in form.ordenamiento:
        fieldset = []
        # Ahora recorremos cada fieldset para saber
        # los campos que lo componen
      for campo_fieldset in campos_fieldset:
          fieldset.append(form.fields[campo_html])
      campos.append(fieldset)
      
    form.fieldsets = campos
    return form

Ejemplo python

En este ejemplo usaremos el bucle al modo python.

def fieldset_form(form):
    """Funcion que devuelve el objeto form
    con los fieldsets del formulario HTML"""
    campos = [[form.fields[item] for campo_fieldset in campos_fieldset] for campos_fieldset in form.ordenamiento]
    #
    # En este ejemplo se recorren los dos formularios
    # y guardan las variables en la misma linea.
    # El primer bucle for equivale al segundo del ejemplo anterior,
    # el de "campos_fieldset", mientras que el segundo bucle for
    # equivale al primero del ejemplo anterior, el de
    # "form.ordenamiento".
    #
    # "form.fields[item]" equivale a "fieldset.append(form.fields[campo_html])"
    # en el ejemplo anterior.
    #
    # Finalmente, fijate en los cochetes "[]". Son para decirle que debes devolver
    # el resultado de dicho bucle como si fuera una lista.
    
    form.fieldsets = campos
    return form