Mostrar todos los atributos del objeto jinja.

¿Hay una manera de mostrar el nombre / contenido / funciones de todos los atributos de un objeto dado en una plantilla jinja. Esto facilitaría la depuración de una plantilla que no funciona como se espera.

Estoy construyendo un sitio web usando elhyde marco y esto sería muy útil ya que todavía estoy aprendiendo las complejidades de jinja y hyde.

Originalmente, pensé que funcionaría usar elattr filtro, pero esto parece requerir un valor de nombre. Me gustaría no tener que especificar el nombre para obtener todos los atributos disponibles para el objeto.

Algunas búsquedas en Google mostraron que la sintaxis de django se parece a la siguiente, pero no estoy familiarizado con django, por lo que esto solo puede aplicarse a los elementos de la base de datos. En pocas palabras, me gustaría un método que funcione como este para cualquier objeto llamadoobj

{% for field, value in obj.get_fields %}
    {{ field }} : {{ value }} </br>
{% endfor %}
solución final:

@jayven tenía razón, podía crear mi propio filtro jinja2. Desafortunadamente, al usar la versión estable de hyde (0.8.4), esto no es un acto trivial de tener un filtro en el pythonpath y establecer un valor simple de yaml en elsite.yaml archivo (hay una solicitud de extracción para eso). Dicho esto, pude resolverlo! Así que la siguiente es mi solución final que termina siendo muy útil para depurar cualquier atributo desconocido.

Es bastante fácil crear extensiones de hyde específicas del sitio, solo cree un paquete de Python local con el siguiente árbol de directorios

hyde_ext
    __init__.py
    custom_filters.py

Ahora crea la extensión:

from hyde.plugin import Plugin
from jinja2 import environmentfilter, Environment


debug_attr_fmt = '''name:  %s
type:  %r
value: %r'''

@environmentfilter
def debug_attr(env, value, verbose=False):
    '''
    A jinja2 filter that creates a <pre> block
    that lists all the attributes of a given object
    inlcuding the value of those attributes and type.

    This filter takes an optional variable "verbose",
    which prints underscore attributes if set to True.
    Verbose printing is off by default.
    '''

    begin = "<pre class='debug'>\n"
    end = "\n</pre>"

    result = ["{% filter escape %}"]
    for attr_name in dir(value):
        if not verbose and attr_name[0] == "_":
            continue
        a = getattr(value, attr_name)
        result.append(debug_attr_fmt % (attr_name, type(a), a))
    result.append("{% endfilter %} ")
    tmpl = Environment().from_string("\n\n".join(result))

    return begin + tmpl.render() + end

    #return "\n\n".join(result)

# list of custom-filters for jinja2
filters = {
        'debug_attr' : debug_attr
        }

class CustomFilterPlugin(Plugin):
    '''
    The curstom-filter plugin allows any
    filters added to the "filters" dictionary
    to be added to hyde
    '''
    def __init__(self, site):
        super(CustomFilterPlugin, self).__init__(site)

    def template_loaded(self,template):
        super(CustomFilterPlugin, self).template_loaded(template)
        self.template.env.filters.update(filters)

Para que Hyde sepa sobre la extensión agregahyde_ext.custom_filters.CustomFilterPlugin a la lista de "complementos" de lasite.yaml expediente.

Por último, pruébelo en un archivo, puede agregarlo a una página aleatoria{{resource|debug_attr}} o lo siguiente para obtener incluso los atributos de subrayado{{resource|debug_attr(verbose=True)}}

Por supuesto, debo agregar, que parece que esto podría volverse mucho más fácil en el futuro cada vez que se lance Hyde 1.0. Sobre todo porque ya hay una solicitud de extracción en espera de implementar una solución más simple. ¡Esta fue una gran manera de aprender un poco más sobre cómo usar jinja y hyde!

Respuestas a la pregunta(1)

Su respuesta a la pregunta