Si puedo devolver un Jinja2 plantilla así:
return render_response('home.htm', **context)

Cómo hacer a continuación, obtener una lista de las variables en el contexto de dentro de la plantilla?

  • Cómo acerca de la lectura de el origen de plantilla? Qué tiene de malo eso?
InformationsquelleAutor Christian | 2010-08-03

2 Comentarios

  1. 36

    Técnicamente, porque el contexto no es aprobada como un llamado diccionario, un poco de trabajo es necesaria para generar una lista de las variables de contexto desde el interior de la plantilla. Es posible sin embargo.

    1. Definir un Jinja contexto de la función para devolver el jinja2.Objeto de contexto, que es esencialmente un diccionario de las variables globales y funciones de los

    2. Hacer que la función disponible en el espacio de nombres global; es decir, una jinja2.Medio ambiente o jinja2.Plantilla globals diccionario

    3. Opcionalmente, filtro de objetos a partir del contexto; por ejemplo, el uso de callable() para saltar Jinja por defecto del mundial de funciones auxiliares (rango, carpintero, etc.). Esto se puede hacer en el contexto de la función o de la plantilla; donde tiene más sentido.

    Ejemplo:

    >>> import jinja2
    >>> 
    >>> @jinja2.contextfunction
    ... def get_context(c):
    ...         return c
    ... 
    >>> tmpl = """ 
    ... {% for key, value in context().items() %}
    ...     {% if not callable(value) %}
    ...         {{ key }}:{{ value }}
    ...     {% endif %}
    ... {% endfor %}
    ... """
    >>> 
    >>> template = jinja2.Template(tmpl)
    >>> template.globals['context'] = get_context
    >>> template.globals['callable'] = callable
    >>>
    >>> context = {'a': 1, 'b': 2, 'c': 3}
    >>> 
    >>> print(template.render(**context))
            a:1
            c:3
            b:2
    

    [Como alternativa, llame a render_response con ('home.htm', context=context) con la solución de trabajo.]

    • Muchas gracias. Yo me inclino a su superior Jinja2 conocimiento.
    • Tenga en cuenta que debido a la callable de verificación, la solución tendría en cuenta las funciones que han sido explícitamente aprobado como parte del contexto. Probablemente no sucede a menudo, pero podría hacer una diferencia.
    • Verdadero. Esta sencilla solución, definitivamente, puede ser mejorado. Por ejemplo, si template es un mundial, get_context() puede devolver un nuevo diccionario basado en context pero sin llaves, que también existen en template.globals.
    • Se ha añadido una función de solicitud para habilitar esta opción por defecto github.com/mitsuhiko/jinja2/issues/174
    • Alguna novedad? Yo lucho con exactamente este
    • Me preguntó Armin, pero seguro que no tiene el tiempo para mirar en que. Para mí la solicitud de extracción con una captura de pantalla sería más convincente que el código de la pieza y una idea flotando alrededor.

  2. 3

    Aquí es cómo conseguir @crewbum la respuesta de trabajo de un Matraz de aplicación:

    import jinja2
    
    @jinja2.contextfunction
    def get_context(c):
        return c
    
    app.jinja_env.globals['context'] = get_context
    app.jinja_env.globals['callable'] = callable
    
    • ¿Dónde poner esto?
    • En la inicialización de la aplicación (o app de fábrica). Si utiliza cualquier frasco de extensiones, como matraz sqlalchemy, matraz de inicio de sesión, etc., esto puede ser en el mismo lugar donde se crean.

Dejar respuesta

Please enter your comment!
Please enter your name here