parameters: (ast)
docstring: Finds all the referenced templates from the AST.  This will return an
      iterator over all the hardcoded template extensions, inclusions and
      imports.  If dynamic inheritance or inclusion is used, `None` will be
      yielded.
  
      >>> from jinja2 import Environment, meta
      >>> env = Environment()
      >>> ast = env.parse('{% extends "layout.html" %}{% include helper %}')
      >>> list(meta.find_referenced_templates(ast))
      ['layout.html', None]
  
      This function is useful for dependency tracking.  For example if you want
      to rebuild parts of the website after a layout template has changed.
docstring_summary: Finds all the referenced templates from the AST.  This will return an
      iterator over all the hardcoded template extensions, inclusions and
      imports.  If dynamic inheritance or inclusion is used, `None` will be
      yielded.
docstring_tokens: Finds all the referenced templates from the AST . This will return an iterator over all the hardcoded template extensions inclusions and imports . If dynamic inheritance or inclusion is used None will be yielded .
function: def find_referenced_templates(ast):
      """Finds all the referenced templates from the AST.  This will return an
      iterator over all the hardcoded template extensions, inclusions and
      imports.  If dynamic inheritance or inclusion is used, `None` will be
      yielded.
  
      >>> from jinja2 import Environment, meta
      >>> env = Environment()
      >>> ast = env.parse('{% extends "layout.html" %}{% include helper %}')
      >>> list(meta.find_referenced_templates(ast))
      ['layout.html', None]
  
      This function is useful for dependency tracking.  For example if you want
      to rebuild parts of the website after a layout template has changed.
      """
      for node in ast.find_all((nodes.Extends, nodes.FromImport, nodes.Import,
                                nodes.Include)):
          if not isinstance(node.template, nodes.Const):
              # a tuple with some non consts in there
              if isinstance(node.template, (nodes.Tuple, nodes.List)):
                  for template_name in node.template.items:
                      # something const, only yield the strings and ignore
                      # non-string consts that really just make no sense
                      if isinstance(template_name, nodes.Const):
                          if isinstance(template_name.value, string_types):
                              yield template_name.value
                      # something dynamic in there
                      else:
                          yield None
              # something dynamic we don't know about here
              else:
                  yield None
              continue
          # constant is a basestring, direct template name
          if isinstance(node.template.value, string_types):
              yield node.template.value
          # a tuple or list (latter *should* not happen) made of consts,
          # yield the consts that are strings.  We could warn here for
          # non string values
          elif isinstance(node, nodes.Include) and \
               isinstance(node.template.value, (tuple, list)):
              for template_name in node.template.value:
                  if isinstance(template_name, string_types):
                      yield template_name
          # something else we don't care about, we could warn here
          else:
              yield None
function_tokens: def find_referenced_templates ( ast ) : for node in ast . find_all ( ( nodes . Extends , nodes . FromImport , nodes . Import , nodes . Include ) ) : if not isinstance ( node . template , nodes . Const ) : # a tuple with some non consts in there if isinstance ( node . template , ( nodes . Tuple , nodes . List ) ) : for template_name in node . template . items : # something const, only yield the strings and ignore # non-string consts that really just make no sense if isinstance ( template_name , nodes . Const ) : if isinstance ( template_name . value , string_types ) : yield template_name . value # something dynamic in there else : yield None # something dynamic we don't know about here else : yield None continue # constant is a basestring, direct template name if isinstance ( node . template . value , string_types ) : yield node . template . value # a tuple or list (latter *should* not happen) made of consts, # yield the consts that are strings.  We could warn here for # non string values elif isinstance ( node , nodes . Include ) and isinstance ( node . template . value , ( tuple , list ) ) : for template_name in node . template . value : if isinstance ( template_name , string_types ) : yield template_name # something else we don't care about, we could warn here else : yield None