summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2008-08-31 18:28:06 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2008-08-31 18:28:06 +0000
commit86316f0be6837e3359b63e48e518b4f7d5b4d78d (patch)
tree53a1bd674845db0c6f12aee766546cb176b13d37
parent79968f986738f5fa23973d91a931f19f59bef269 (diff)
Fixed #7027: template tags now corectly break tokens around strings marked for translation.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8769 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/template/__init__.py14
-rw-r--r--tests/regressiontests/templates/tests.py6
2 files changed, 19 insertions, 1 deletions
diff --git a/django/template/__init__.py b/django/template/__init__.py
index ffdb4e4809..f84a1cef66 100644
--- a/django/template/__init__.py
+++ b/django/template/__init__.py
@@ -197,7 +197,19 @@ class Token(object):
self.contents[:20].replace('\n', ''))
def split_contents(self):
- return list(smart_split(self.contents))
+ split = []
+ bits = iter(smart_split(self.contents))
+ for bit in bits:
+ # Handle translation-marked template pieces
+ if bit.startswith('_("') or bit.startswith("_('"):
+ sentinal = bit[2] + ')'
+ trans_bit = [bit]
+ while not bit.endswith(sentinal):
+ bit = bits.next()
+ trans_bit.append(bit)
+ bit = ' '.join(trans_bit)
+ split.append(bit)
+ return split
class Lexer(object):
def __init__(self, template_string, origin):
diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py
index c6e915bb56..2cfc18916f 100644
--- a/tests/regressiontests/templates/tests.py
+++ b/tests/regressiontests/templates/tests.py
@@ -130,6 +130,12 @@ class Templates(unittest.TestCase):
test_template_sources('/DIR1/index.HTML', template_dirs,
['/dir1/index.html'])
+ def test_token_smart_split(self):
+ # Regression test for #7027
+ token = template.Token(template.TOKEN_BLOCK, 'sometag _("Page not found") value|yesno:_("yes,no")')
+ split = token.split_contents()
+ self.assertEqual(split, ["sometag", '_("Page not found")', 'value|yesno:_("yes,no")'])
+
def test_templates(self):
template_tests = self.get_template_tests()
filter_tests = filters.get_filter_tests()