Показать все атрибуты объекта jinja

Есть ли способ отобразить имя / содержимое / функции всех атрибутов данного объекта в шаблоне jinja. Это облегчило бы отладку шаблона, который не работает должным образом.

Я создаю сайт, используяhyde рамки, и это может пригодиться, так как я все еще изучаю тонкости как дзиндзя, так и хайда.

Первоначально я думал, что это будет работать, чтобы использоватьattr фильтр, но это, кажется, требует значения имени. Я хотел бы не указывать имя, чтобы получить все доступные атрибуты для объекта.

Некоторые поиски в Google показали, что синтаксис django выглядит следующим образом, но я не знаком с django, так что это может относиться только к элементам базы данных. Короче говоря, я хотел бы метод, который работает примерно так для любого объекта с именемobj

{% for field, value in obj.get_fields %}
    {{ field }} : {{ value }} <br>
{% endfor %}
окончательное решение:

@jayven был прав, я мог бы создать свой собственный фильтр jinja2. К сожалению, используя стабильную версию hyde (0.8.4), это не тривиальный акт: наличие фильтра в pythonpath и установка простого значения yaml вsite.yaml файл (для этого есть pull-запрос). При этом, я смог понять это! Итак, вот мое окончательное решение, которое в конечном итоге оказывается очень полезным для отладки любых неизвестных атрибутов.

Это'Достаточно легко создать специфичные для сайта расширения hyde, просто создайте локальный пакет python со следующим деревом каталогов

hyde_ext
    __init__.py
    custom_filters.py

Теперь создайте расширение:

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 
 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)

Чтобы Хайд знал о расширении добавитьhyde_ext.custom_filters.CustomFilterPlugin к "плагины» списокsite.yaml файл.

Наконец, протестируйте его в файле, вы можете добавить это на какую-то случайную страницу{{resource|debug_attr}} или следующее, чтобы получить даже атрибуты подчеркивания{{resource|debug_attr(verbose=True)}}

Конечно, я должен добавить, что кажется, что это может стать намного легче в будущем, когда выйдет Hyde 1.0. Тем более что уже есть запрос на получение, ожидающий реализации более простого решения. Это был отличный способ узнать немного больше о том, как использовать дзиндзя и хайда!

Ответы на вопрос(1)

Ваш ответ на вопрос