class_docstr: This is the central parsing class Jinja uses.  It's passed to
  extensions and can be used to parse expressions or statements.
class_docstr_tok: ["This","is","the","central","parsing","class","Jinja","uses",".","It","'s","passed","to","extensions","and","can","be","used","to","parse","expressions","or","statements","."]
docstr: Parse a for loop.
code: def parse_for(self) -> nodes.For:
      """Parse a for loop."""
      lineno = self.stream.expect("name:for").lineno
      target = self.parse_assign_target(extra_end_rules=("name:in",))
      self.stream.expect("name:in")
      iter = self.parse_tuple(
          with_condexpr=False, extra_end_rules=("name:recursive",)
      )
      test = None
      if self.stream.skip_if("name:if"):
          test = self.parse_expression()
      recursive = self.stream.skip_if("name:recursive")
      body = self.parse_statements(("name:endfor", "name:else"))
      if next(self.stream).value == "endfor":
          else_ = []
      else:
          else_ = self.parse_statements(
              ("name:endfor",), drop_needle=True
          )
      return nodes.For(
          target, iter, body, else_, test, recursive, lineno=lineno
      )
  
imports: import typing
  import typing
  from .None import nodes
  from .exceptions import TemplateAssertionError
  from .exceptions import TemplateSyntaxError
  from .lexer import describe_token
  from .lexer import describe_token_expr
label_desc: Use image node_id 11 for calling the Parser obj's underlying member method code with example usage: obj.parse_for() and returns: nodes