def get_layout_objects(self, *LayoutClasses, **kwargs):
index = kwargs.pop('<STR_LIT:index>', None)<EOL>max_level = kwargs.pop('<STR_LIT>', <NUM_LIT:0>)<EOL>greedy = kwargs.pop('<STR_LIT>', False)<EOL>pointers = []<EOL>if index is not None and not isinstance(index, list):<EOL><INDENT>index = [index]<EOL><DEDENT>elif index is None:<EOL><INDENT>index = []<EOL><DEDENT>for i, layout_object in enumerate(self.fields):<EOL><INDENT>if isinstance(layout_object, LayoutClasses):<EOL><INDENT>if len(LayoutClasses) == <NUM_LIT:1> and LayoutClasses[<NUM_LIT:0>] == string_types:<EOL><INDENT>pointers.append([index + [i], layout_object])<EOL><DEDENT>else:<EOL><INDENT>pointers.append([index + [i], layout_object.__class__.__name__.lower()])<EOL><DEDENT><DEDENT>if hasattr(layout_object, '<STR_LIT>') and (len(index) < max_level or greedy):<EOL><INDENT>new_kwargs = {'<STR_LIT:index>': index + [i], '<STR_LIT>': max_level, '<STR_LIT>': greedy}<EOL>pointers = pointers + layout_object.get_layout_objects(*LayoutClasses, **new_kwargs)<EOL><DEDENT><DEDENT>return pointers<EOL>
Returns a list of lists pointing to layout objects of any type matching
`LayoutClasses`::

    [
        [[0,1,2], 'div'],
        [[0,3], 'field_name']
    ]

:param max_level: An integer that indicates max level depth to reach when
traversing a layout.
:param greedy: Boolean that indicates whether to be greedy. If set, max_level
is skipped.