es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo utilizar una variable para obtener los atributos de otra variable en las plantillas de Django.

Estoy tratando de rellenar una cuadrícula CSS en una plantilla de Django con columnas y filas especificadas. Según mi mejor entendimiento, necesito hacer algo como “variables anidadas” en la plantilla de Django para lograr lo que estoy buscando. Intenté esto, pero no funcionó:

{% for parent_row in parent_rows %}
   {{ parent_row }}
   <div>p1</div>
   <div>p2</div>
   {% for child_row in children_rows %}
      <div> {{ child_row}} </div>
      {% for guy in guys %}
         <input type=”text” value=”{{guy}}.{{child_row}}”></input>
      {% endfor %}
   {% endfor %}
{% endfor %}

El {{guy}}.{{child_row}} y algunas de las variantes similares que intenté no funcionan. Logro obtener el resultado que estoy buscando simplemente escribiendo todo el HTML abierto, y luego iterando a través de cada chico en filas separadas, ya que puedo usar, por ejemplo, guy.name para obtener el valor deseado en cada fila, pero esto significa mucha repetición.

parent_rows podría parecer algo como esto, por ejemplo:

“names”, “contact_information”, “hobbies”

children_rows podría parecer algo como esto, por ejemplo:

“forename”, “family_name”, “phone_number”, “mail”, “favourite_hobby”

y dos registros en guys podrían ser así (ambos idénticos, para facilitar la ilustración):

“forename”: “Mike”
“family_name”: “McMediocre”
“phone_number”: “123”
“mail”: “mike@mediocre.com”
“favourite_hobby”: “tennis”

Estoy tratando de poblar la cuadrícula para que se vea así:

| col1                   | col2             | col3             |
| ---------------------- | ---------------- | ---------------- |
| names                  | p1               | p2               |
| forename               | Mike             | Mike             |
| family_name            | McMediocre       | McMediocre       |
| contact_information    | p1               | p2               |
| phone_number           | 123              | 123              |
| mail                   | mike@mediocre.com| mike@mediocre.com|
| hobbies                | p1               | p2               |
| favourite_hobby        | tennis           | tennis           |

EDIT: Encontré una respuesta a mi pregunta desde aquí. La respuesta aceptada también fue útil en mi situación.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para poblar la cuadrícula CSS en una plantilla de Django con columnas y filas especificadas, se puede utilizar un bucle anidado con variables anidadas. El código proporcionado en la pregunta tiene un problema con la forma en que se utilizan las variables anidadas. Para acceder a un atributo de un objeto utilizando una variable en una plantilla de Django, se puede utilizar la etiqueta de plantilla “with”.

    Aquí hay un fragmento de código actualizado con el enfoque correcto:

    {% for parent_row in parent_rows %}
      <div>{{ parent_row }}</div>
      <div>p1</div>
      <div>p2</div>
      {% for child_row in children_rows %}
        <div>{{ child_row }}</div>
        {% for guy in guys %}
          {% with guy_attr=child_row|add:'__' %}
            <div>{{ guy|getattr:guy_attr }}</div>
          {% endwith %}
        {% endfor %}
      {% endfor %}
    {% endfor %}
    

    En el código actualizado, se utiliza la etiqueta de plantilla “with” para crear una nueva variable “guy_attr” que combina la variable “child_row” y el carácter ‘__’ para formar una cadena que se puede utilizar con el filtro “getattr” para acceder al atributo del objeto “guy”.

    El resultado del código actualizado será una cuadrícula CSS con las columnas y filas especificadas, como se muestra en el ejemplo.

    Además, el autor de la pregunta ha encontrado una respuesta útil en el hilo de StackOverflow.

Comments are closed.