Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

[1.1.X] Fixed #11972: Corrected title filter handling of numbers foll…

…owed by letters. Thanks schwank@gmail.com and Randy Barlow.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@11823 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 5e6c3d24b31af8af5514c6b7ecf700ae7836eef8 1 parent 512ee70
@kmtracey kmtracey authored
View
2  AUTHORS
@@ -54,6 +54,7 @@ answer newbie questions, and generally made Django that much better:
Niran Babalola <niran@niran.org>
Morten Bagai <m@bagai.com>
Mikaël Barbero <mikael.barbero nospam at nospam free.fr>
+ Randy Barlow <randy@electronsweatshop.com>
Scott Barr <scott@divisionbyzero.com.au>
Jiri Barton
Ned Batchelder <http://www.nedbatchelder.com/>
@@ -378,6 +379,7 @@ answer newbie questions, and generally made Django that much better:
Massimo Scamarcia <massimo.scamarcia@gmail.com>
David Schein
Bernd Schlapsi
+ schwank@gmail.com
scott@staplefish.com
Ilya Semenov <semenov@inetss.com>
serbaut@gmail.com
View
3  django/template/defaultfilters.py
@@ -249,7 +249,8 @@ def stringformat(value, arg):
def title(value):
"""Converts a string into titlecase."""
- return re.sub("([a-z])'([A-Z])", lambda m: m.group(0).lower(), value.title())
+ t = re.sub("([a-z])'([A-Z])", lambda m: m.group(0).lower(), value.title())
+ return re.sub("\d([A-Z])", lambda m: m.group(0).lower(), t)
title.is_safe = True
title = stringfilter(title)
View
20 tests/regressiontests/templates/filters.py
@@ -120,13 +120,19 @@ def get_filter_tests():
# Notice that escaping is applied *after* any filters, so the string
# formatting here only needs to deal with pre-escaped characters.
- 'filter-stringformat01': ('{% autoescape off %}.{{ a|stringformat:"5s" }}. .{{ b|stringformat:"5s" }}.{% endautoescape %}', {"a": "a<b", "b": mark_safe("a<b")}, u". a<b. . a<b."),
- 'filter-stringformat02': ('.{{ a|stringformat:"5s" }}. .{{ b|stringformat:"5s" }}.', {"a": "a<b", "b": mark_safe("a<b")}, u". a&lt;b. . a<b."),
-
- # XXX No test for "title" filter; needs an actual object.
-
- 'filter-truncatewords01': ('{% autoescape off %}{{ a|truncatewords:"2" }} {{ b|truncatewords:"2"}}{% endautoescape %}', {"a": "alpha & bravo", "b": mark_safe("alpha &amp; bravo")}, u"alpha & ... alpha &amp; ..."),
- 'filter-truncatewords02': ('{{ a|truncatewords:"2" }} {{ b|truncatewords:"2"}}', {"a": "alpha & bravo", "b": mark_safe("alpha &amp; bravo")}, u"alpha &amp; ... alpha &amp; ..."),
+ 'filter-stringformat01': ('{% autoescape off %}.{{ a|stringformat:"5s" }}. .{{ b|stringformat:"5s" }}.{% endautoescape %}',
+ {"a": "a<b", "b": mark_safe("a<b")}, u". a<b. . a<b."),
+ 'filter-stringformat02': ('.{{ a|stringformat:"5s" }}. .{{ b|stringformat:"5s" }}.', {"a": "a<b", "b": mark_safe("a<b")},
+ u". a&lt;b. . a<b."),
+
+ # Test the title filter
+ 'filter-title1' : ('{{ a|title }}', {'a' : 'JOE\'S CRAB SHACK'}, u'Joe&#39;s Crab Shack'),
+ 'filter-title2' : ('{{ a|title }}', {'a' : '555 WEST 53RD STREET'}, u'555 West 53rd Street'),
+
+ 'filter-truncatewords01': ('{% autoescape off %}{{ a|truncatewords:"2" }} {{ b|truncatewords:"2"}}{% endautoescape %}',
+ {"a": "alpha & bravo", "b": mark_safe("alpha &amp; bravo")}, u"alpha & ... alpha &amp; ..."),
+ 'filter-truncatewords02': ('{{ a|truncatewords:"2" }} {{ b|truncatewords:"2"}}',
+ {"a": "alpha & bravo", "b": mark_safe("alpha &amp; bravo")}, u"alpha &amp; ... alpha &amp; ..."),
# The "upper" filter messes up entities (which are case-sensitive),
# so it's not safe for non-escaping purposes.

0 comments on commit 5e6c3d2

Please sign in to comment.
Something went wrong with that request. Please try again.