Commit c57ba673 authored by Chris Beaven's avatar Chris Beaven
Browse files

Fixed #14502 again -- saner verbatim closing token

Previously, the closing token for the verbatim tag was specified as the
first argument of the opening token. As pointed out by Jannis, this is
a rather major departure from the core tag standard.

The new method reflects how you can give a specific closing name to
{% block %} tags.
parent ffa6d95f
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -216,13 +216,8 @@ class Lexer(object):
            if token_string.startswith(VARIABLE_TAG_START):
                token = Token(TOKEN_VAR, token_string[2:-2].strip())
            elif token_string.startswith(BLOCK_TAG_START):
                if block_content.startswith('verbatim'):
                    bits = block_content.split(' ', 1)
                    if bits[0] == 'verbatim':
                        if len(bits) > 1:
                            self.verbatim = bits[1]
                        else:
                            self.verbatim = 'endverbatim'
                if block_content[:9] in ('verbatim', 'verbatim '):
                    self.verbatim = 'end%s' % block_content
                token = Token(TOKEN_BLOCK, block_content)
            elif token_string.startswith(COMMENT_TAG_START):
                content = ''
+5 −9
Original line number Diff line number Diff line
@@ -1291,18 +1291,14 @@ def verbatim(parser, token):
            {% don't process this %}
        {% endverbatim %}

    You can also specify an alternate closing tag::
    You can also designate a specific closing tag block (allowing the
    unrendered use of ``{% endverbatim %}``)::

        {% verbatim -- %}
        {% verbatim myblock %}
            ...
        {% -- %}
        {% endverbatim myblock %}
    """
    bits = token.contents.split(' ', 1)
    if len(bits) > 1:
        closing_tag = bits[1]
    else:
        closing_tag = 'endverbatim'
    nodelist = parser.parse((closing_tag,))
    nodelist = parser.parse(('endverbatim',))
    parser.delete_first_token()
    return VerbatimNode(nodelist.render(Context()))

+5 −5
Original line number Diff line number Diff line
@@ -1047,12 +1047,12 @@ Django's syntax. For example::
        {{if dying}}Still alive.{{/if}}
    {% endverbatim %}

You can also specify an alternate closing tag::
You can also designate a specific closing tag, allowing the use of
``{% endverbatim %}`` as part of the unrendered contents::

    {% verbatim finished %}
        The verbatim tag looks like this:
        {% verbatim %}{% endverbatim %}
    {% finished %}
    {% verbatim myblock %}
        Avoid template rendering via the {% verbatim %}{% endverbatim %} block.
    {% endverbatim myblock %}

.. templatetag:: widthratio

+1 −1
Original line number Diff line number Diff line
@@ -1623,7 +1623,7 @@ class Templates(unittest.TestCase):
            'verbatim-tag03': ("{% verbatim %}It's the {% verbatim %} tag{% endverbatim %}", {}, "It's the {% verbatim %} tag"),
            'verbatim-tag04': ('{% verbatim %}{% verbatim %}{% endverbatim %}{% endverbatim %}', {}, template.TemplateSyntaxError),
            'verbatim-tag05': ('{% verbatim %}{% endverbatim %}{% verbatim %}{% endverbatim %}', {}, ''),
            'verbatim-tag06': ("{% verbatim -- %}Don't {% endverbatim %} just yet{% -- %}", {}, "Don't {% endverbatim %} just yet"),
            'verbatim-tag06': ("{% verbatim special %}Don't {% endverbatim %} just yet{% endverbatim special %}", {}, "Don't {% endverbatim %} just yet"),
        }
        return tests