Exibir todos os atributos do objeto jinja

Existe uma maneira de exibir o nome / conteúdo / funções de todos os atributos de um determinado objeto em um modelo jinja. Isso tornaria mais fácil depurar um modelo que não está agindo conforme o esperado.

Eu estou construindo um site usando ohyde framework e isso seria muito útil, pois eu ainda estou aprendendo as complexidades de ambos jinja e hyde.

Originalmente, eu pensava que funcionaria usar oattr filtro, mas isso parece exigir um valor de nome. Eu gostaria de não ter que especificar o nome para obter todos os atributos disponíveis para o objeto.

Algumas pesquisas no google mostraram que a sintaxe do django se parece com a seguinte, mas eu não estou familiarizado com o django, então isso pode se aplicar apenas aos itens do banco de dados. Resumindo, gostaria que um método que funcionasse assim para qualquer objeto chamadoobj

{% for field, value in obj.get_fields %}
    {{ field }} : {{ value }} </br>
{% endfor %}
solução final:

@jayven estava certo, eu poderia criar meu próprio filtro jinja2. Infelizmente, usando a versão estável do hyde (0.8.4), isso não é um ato trivial de ter um filtro no caminho python e definir um valor yaml simples nosite.yaml file (Existe um pedido pull para isso). Dito isto, fui capaz de descobrir! Então, o seguinte é a minha solução final, que acaba sendo muito útil para a depuração de qualquer atributo desconhecido.

É bastante fácil criar extensões hyde específicas do site, basta criar um pacote python local com a seguinte árvore de diretórios

hyde_ext
    __init__.py
    custom_filters.py

Agora crie a extensão:

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 deixar o hyde saber sobre a extensão, adicionehyde_ext.custom_filters.CustomFilterPlugin para a lista de "plugins" dosite.yaml Arquivo.

Por último, teste em um arquivo, você pode adicionar isso a alguma página aleatória{{resource|debug_attr}} ou o seguinte para obter até mesmo os atributos de sublinhado{{resource|debug_attr(verbose=True)}}

É claro, devo acrescentar, que parece que isso pode se tornar muito mais fácil no futuro sempre que o hyde 1.0 for lançado. Especialmente desde que já existe um pedido pull esperando para implementar uma solução mais simples. Esta foi uma ótima maneira de aprender um pouco mais sobre como usar jinja e hyde!

questionAnswers(1)

yourAnswerToTheQuestion