2011-12-24 16 views
10

El escenario sería:pasar una variable en una importación de jinja o incluir desde un archivo html padres

"tiene una persona llamada variable que contiene una serie de campos como nombre, dirección, etc, que desea pasar a una pieza parcial de html" - esta solución podría ser el resultado de una búsqueda de clientes, por ejemplo

snippet.html

<div id="item"> 
    <ul> 
    <li> 
     <span>{{name}}</span> 
     <span>{{address}}</span> 
    <li> 
    </ul> 
</div> 

mipagina.html

<div id="result"> 
    {% include "snippet.html" passing {{person}} %} 
</div> 

¿Cuál es la mejor manera de lograr esto. En la documentación, se trata de pasar el contexto por todas partes, pero me parece que es un objeto bastante grande cuando se renderizan plantillas. seguramente es más fácil pasar objetos específicos en cada plantilla?

Respuesta

12

Cuando se incluye una plantilla en otra, se obtiene acceso a su contexto, así que si usted pasa su person variable para mypage.html 's contexto, usted será capaz de acceder a él desde su plantilla importada como esto:

snippet.html:

<div id="item"> 
    <ul> 
     <li> 
      <span>{{ person.name }}</span> 
      <span>{{ person.address }}</span> 
     </li> 
    </ul> 
</div> 

mypage.html:

<div id="result"> 
    {% include 'snippet.html' %} 
</div> 

view.py:

def view(person_id): 
    person = Person.get(person_id) # or whatever source you get your data from 
    return render_template('mypage.html', person=person) 
+1

¿qué pasa con las macros en archivo incluido – aWebDeveloper

+4

La parte frustrante de esto es que no se puede luego hacer su pequeño incluir lo suficientemente genérico como para ser agnóstico al nombre de "variable de llamada", por así decirlo. Por ejemplo, si estoy construyendo una forma genérica para paginar una lista de objetos, generalmente no los tengo en un contenedor llamado "objetos", es algo más específico como "animales". – Dan

+0

@Dan ¿Por qué no usar macros para eso? – Achshar

4

Esto complementa la respuesta de MatToufoutu.

Las variables globales de entorno siempre están disponibles en macros, pero las variables de contexto no lo son. Tener el contexto disponible en una macro importado, usted tiene que utilizar con el contexto al importar, por ejemplo:

{% from "your_macros.html" import your_macro with context %} 
Cuestiones relacionadas