From 39639cfd22386856e4ee3cc9fe5e75c30bec066b Mon Sep 17 00:00:00 2001 From: Adrian Holovaty Date: Sun, 15 Jan 2006 00:48:23 +0000 Subject: [PATCH] Fixed #1176 -- Changed {% comment %} template tag not to generate a nodelist, so it's now possible to comment-out broken template tags. Thanks, Kieran Holland git-svn-id: http://code.djangoproject.com/svn/django/trunk@1964 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/core/template/__init__.py | 7 +++++++ django/core/template/defaulttags.py | 3 +-- tests/othertests/templates.py | 5 +++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/django/core/template/__init__.py b/django/core/template/__init__.py index 60bb5e0888..6298ce24b9 100644 --- a/django/core/template/__init__.py +++ b/django/core/template/__init__.py @@ -311,6 +311,13 @@ class Parser(object): self.unclosed_block_tag(parse_until) return nodelist + def skip_past(self, endtag): + while self.tokens: + token = self.next_token() + if token.token_type == TOKEN_BLOCK and token.contents == endtag: + return + self.unclosed_block_tag([endtag]) + def create_variable_node(self, filter_expression): return VariableNode(filter_expression) diff --git a/django/core/template/defaulttags.py b/django/core/template/defaulttags.py index c11a67838a..518498664d 100644 --- a/django/core/template/defaulttags.py +++ b/django/core/template/defaulttags.py @@ -286,8 +286,7 @@ def comment(parser, token): """ Ignore everything between ``{% comment %}`` and ``{% endcomment %}`` """ - nodelist = parser.parse(('endcomment',)) - parser.delete_first_token() + parser.skip_past('endcomment') return CommentNode() comment = register.tag(comment) diff --git a/tests/othertests/templates.py b/tests/othertests/templates.py index 7063720c31..f4f94e579d 100644 --- a/tests/othertests/templates.py +++ b/tests/othertests/templates.py @@ -144,6 +144,11 @@ TEMPLATE_TESTS = { 'comment-tag01': ("{% comment %}this is hidden{% endcomment %}hello", {}, "hello"), 'comment-tag02': ("{% comment %}this is hidden{% endcomment %}hello{% comment %}foo{% endcomment %}", {}, "hello"), + # Comment tag can contain invalid stuff. + 'comment-tag03': ("foo{% comment %} {% if %} {% endcomment %}", {}, "foo"), + 'comment-tag04': ("foo{% comment %} {% endblock %} {% endcomment %}", {}, "foo"), + 'comment-tag05': ("foo{% comment %} {% somerandomtag %} {% endcomment %}", {}, "foo"), + ### FOR TAG ############################################################### 'for-tag01': ("{% for val in values %}{{ val }}{% endfor %}", {"values": [1, 2, 3]}, "123"), 'for-tag02': ("{% for val in values reversed %}{{ val }}{% endfor %}", {"values": [1, 2, 3]}, "321"),