From c57ba673312cb5774d544353044e2182b6223040 Mon Sep 17 00:00:00 2001 From: Chris Beaven Date: Tue, 19 Jun 2012 10:49:30 +1200 Subject: [PATCH] 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. --- django/template/base.py | 9 ++------- django/template/defaulttags.py | 14 +++++--------- docs/ref/templates/builtins.txt | 10 +++++----- tests/regressiontests/templates/tests.py | 2 +- 4 files changed, 13 insertions(+), 22 deletions(-) diff --git a/django/template/base.py b/django/template/base.py index 5a91bfda99..89bc90971f 100644 --- a/django/template/base.py +++ b/django/template/base.py @@ -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 = '' diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index 0de5d9e3db..83b72e120b 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -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())) diff --git a/docs/ref/templates/builtins.txt b/docs/ref/templates/builtins.txt index 6f341e9f97..cf228d72f6 100644 --- a/docs/ref/templates/builtins.txt +++ b/docs/ref/templates/builtins.txt @@ -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 diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index 989fd72d94..35d01221ab 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -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