summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Wilson Jr <gary.wilson@gmail.com>2008-08-15 21:08:11 +0000
committerGary Wilson Jr <gary.wilson@gmail.com>2008-08-15 21:08:11 +0000
commit6d863fef8a992ef28b081e9fa6043e4a9799e965 (patch)
tree271d5541f009977fdec99ce17e4b0d49cd17f779
parent0ca738363afafacf1a82c978b2a2d1e00d9495a8 (diff)
Fixed #5270 -- Allow template tags and filters to accept an emtpy string, patch from jdunck.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8393 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/template/__init__.py11
-rw-r--r--tests/regressiontests/templates/tests.py8
2 files changed, 14 insertions, 5 deletions
diff --git a/django/template/__init__.py b/django/template/__init__.py
index 5c4ab3052a..ffdb4e4809 100644
--- a/django/template/__init__.py
+++ b/django/template/__init__.py
@@ -485,9 +485,14 @@ class FilterExpression(object):
(token[:upto], token[upto:start], token[start:]))
if var == None:
var, constant, i18n_constant = match.group("var", "constant", "i18n_constant")
- if i18n_constant:
- var = '"%s"' % _(i18n_constant.replace(r'\"', '"'))
- elif constant:
+ if i18n_constant is not None:
+ # Don't pass the empty string to gettext, because the empty
+ # string translates to meta information.
+ if i18n_constant == "":
+ var = '""'
+ else:
+ var = '"%s"' % _(i18n_constant.replace(r'\"', '"'))
+ elif constant is not None:
var = '"%s"' % constant.replace(r'\"', '"')
upto = match.end()
if var == None:
diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py
index 13b8c6b488..96e1d662c6 100644
--- a/tests/regressiontests/templates/tests.py
+++ b/tests/regressiontests/templates/tests.py
@@ -365,6 +365,9 @@ class Templates(unittest.TestCase):
# Numbers as filter arguments should work
'filter-syntax19': ('{{ var|truncatewords:1 }}', {"var": "hello world"}, "hello ..."),
+
+ #filters should accept empty string constants
+ 'filter-syntax20': ('{{ ""|default_if_none:"was none" }}', {}, ""),
### COMMENT SYNTAX ########################################################
'comment-syntax01': ("{# this is hidden #}hello", {}, "hello"),
@@ -770,11 +773,12 @@ class Templates(unittest.TestCase):
'i18n14': ('{% cycle "foo" _("Password") _(\'Password\') as c %} {% cycle c %} {% cycle c %}', {'LANGUAGE_CODE': 'de'}, 'foo Passwort Passwort'),
'i18n15': ('{{ absent|default:_("Password") }}', {'LANGUAGE_CODE': 'de', 'absent': ""}, 'Passwort'),
'i18n16': ('{{ _("<") }}', {'LANGUAGE_CODE': 'de'}, '<'),
+ 'i18n17': ('{{ _("") }}', {'LANGUAGE_CODE': 'de'}, ''),
# Escaping inside blocktrans works as if it was directly in the
# template.
- 'i18n17': ('{% load i18n %}{% blocktrans with anton|escape as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, u'α &amp; β'),
- 'i18n18': ('{% load i18n %}{% blocktrans with anton|force_escape as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, u'α &amp; β'),
+ 'i18n18': ('{% load i18n %}{% blocktrans with anton|escape as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, u'α &amp; β'),
+ 'i18n19': ('{% load i18n %}{% blocktrans with anton|force_escape as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, u'α &amp; β'),
### HANDLING OF TEMPLATE_STRING_IF_INVALID ###################################