  
  Then, any time you want to use that custom tag, load its library and call it
  without any arguments, like so:
  
  .. code-block:: html+django
  
      {% jump_link %}
  
  Note that when you're using ``takes_context=True``, there's no need to pass
  arguments to the template tag. It automatically gets access to the context.
 
</s> remove     {% jump_link %}
 </s> add Now your tag should begin to look like this:: </s> remove Then, any time you want to use that custom tag, load its library and call it
without any arguments, like so:
 </s> add Initially, ``token.split_contents()`` will return three values: </s> remove Note that when you're using ``takes_context=True``, there's no need to pass
arguments to the template tag. It automatically gets access to the context.
 </s> add     from django import template </s> remove     Jump directly to <a href="{{ link }}">{{ title }}</a>.
 </s> add     <p>This post was last updated at {% format_time blog_entry.date_updated "%Y-%m-%d %I:%M %p" %}.</p> </s> remove The ``takes_context`` parameter defaults to ``False``. When it's set to
``True``, the tag is passed the context object, as in this example. That's the
only difference between this case and the previous ``inclusion_tag`` example.
 </s> add     def do_format_time(parser, token):
        try:
            # split_contents() knows not to split quoted strings.
            tag_name, date_to_be_formatted, format_string = token.split_contents()
        except ValueError:
            raise template.TemplateSyntaxError("%r tag requires exactly two arguments" % token.contents.split()[0])
        if not (format_string[0] == format_string[-1] and format_string[0] in ('"', "'")):
            raise template.TemplateSyntaxError("%r tag's argument should be in quotes" % tag_name)
        return FormatTimeNode(date_to_be_formatted, format_string[1:-1])
1. The tag name ``format_time``.
2. The string ``"blog_entry.date_updated"`` (without the surrounding
   quotes).
3. The formatting string ``"%Y-%m-%d %I:%M %p"``. The return value from
   ``split_contents()`` will include the leading and trailing quotes for
   string literals like this.
  
  Then, any time you want to use that custom tag, load its library and call it
  without any arguments, like so:
  
1. The tag name ``format_time``.
2. The string ``"blog_entry.date_updated"`` (without the surrounding
   quotes).
3. The formatting string ``"%Y-%m-%d %I:%M %p"``. The return value from
   ``split_contents()`` will include the leading and trailing quotes for
   string literals like this.
  
      {% jump_link %}
  
  Note that when you're using ``takes_context=True``, there's no need to pass
  arguments to the template tag. It automatically gets access to the context.
keep keep keep keep replace keep keep keep keep keep
 Fixed #20435 -- Reordered the custom template tags docs.

Introduced the various shortcuts before explaining the more complex
parser/render functionality.

Also removed non-decorator syntax: it's been years since Django
supported a Python version without decorators. 
docs/howto/custom-template-tags.txt