# -*- coding: utf-8 -*- r""" >>> floatformat(7.7) u'7.7' >>> floatformat(7.0) u'7' >>> floatformat(0.7) u'0.7' >>> floatformat(0.07) u'0.1' >>> floatformat(0.007) u'0.0' >>> floatformat(0.0) u'0' >>> floatformat(7.7,3) u'7.700' >>> floatformat(6.000000,3) u'6.000' >>> floatformat(6.200000, 3) u'6.200' >>> floatformat(6.200000, -3) u'6.200' >>> floatformat(13.1031,-3) u'13.103' >>> floatformat(11.1197, -2) u'11.12' >>> floatformat(11.0000, -2) u'11' >>> floatformat(11.000001, -2) u'11.00' >>> floatformat(8.2798, 3) u'8.280' >>> floatformat(u'foo') u'' >>> floatformat(13.1031, u'bar') u'13.1031' >>> floatformat(u'foo', u'bar') u'' >>> floatformat(None) u'' >>> addslashes(u'"double quotes" and \'single quotes\'') u'\\"double quotes\\" and \\\'single quotes\\\'' >>> addslashes(ur'\ : backslashes, too') u'\\\\ : backslashes, too' >>> capfirst(u'hello world') u'Hello world' >>> escapejs(u'"double quotes" and \'single quotes\'') u'\\"double quotes\\" and \\\'single quotes\\\'' >>> escapejs(ur'\ : backslashes, too') u'\\\\ : backslashes, too' >>> escapejs(u'and lots of whitespace: \r\n\t\v\f\b') u'and lots of whitespace: \\r\\n\\t\\v\\f\\b' >>> escapejs(ur'') u' disallowed tags', 'script img') u'some html with alert("You smell") disallowed tags' >>> striptags(u'some html with disallowed tags') u'some html with alert("You smell") disallowed tags' >>> dictsort([{'age': 23, 'name': 'Barbara-Ann'}, ... {'age': 63, 'name': 'Ra Ra Rasputin'}, ... {'name': 'Jonny B Goode', 'age': 18}], 'age') [{'age': 18, 'name': 'Jonny B Goode'}, {'age': 23, 'name': 'Barbara-Ann'}, {'age': 63, 'name': 'Ra Ra Rasputin'}] >>> dictsortreversed([{'age': 23, 'name': 'Barbara-Ann'}, ... {'age': 63, 'name': 'Ra Ra Rasputin'}, ... {'name': 'Jonny B Goode', 'age': 18}], 'age') [{'age': 63, 'name': 'Ra Ra Rasputin'}, {'age': 23, 'name': 'Barbara-Ann'}, {'age': 18, 'name': 'Jonny B Goode'}] >>> first([0,1,2]) 0 >>> first(u'') u'' >>> first(u'test') u't' >>> join([0,1,2], u'glue') u'0glue1glue2' >>> length(u'1234') 4 >>> length([1,2,3,4]) 4 >>> length_is([], 0) True >>> length_is([], 1) False >>> length_is('a', 1) True >>> length_is(u'a', 10) False >>> slice_(u'abcdefg', u'0') u'' >>> slice_(u'abcdefg', u'1') u'a' >>> slice_(u'abcdefg', u'-1') u'abcdef' >>> slice_(u'abcdefg', u'1:2') u'b' >>> slice_(u'abcdefg', u'1:3') u'bc' >>> slice_(u'abcdefg', u'0::2') u'aceg' >>> unordered_list([u'item 1', u'item 2']) u'\t
  • item 1
  • \n\t
  • item 2
  • ' >>> unordered_list([u'item 1', [u'item 1.1']]) u'\t
  • item 1\n\t\n\t
  • ' >>> unordered_list([u'item 1', [u'item 1.1', u'item1.2'], u'item 2']) u'\t
  • item 1\n\t\n\t
  • \n\t
  • item 2
  • ' >>> unordered_list([u'item 1', [u'item 1.1', [u'item 1.1.1', [u'item 1.1.1.1']]]]) u'\t
  • item 1\n\t\n\t
  • ' >>> unordered_list(['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']]) u'\t
  • States\n\t\n\t
  • ' # Old format for unordered lists should still work >>> unordered_list([u'item 1', []]) u'\t
  • item 1
  • ' >>> unordered_list([u'item 1', [[u'item 1.1', []]]]) u'\t
  • item 1\n\t\n\t
  • ' >>> unordered_list([u'item 1', [[u'item 1.1', []], [u'item 1.2', []]]]) u'\t
  • item 1\n\t\n\t
  • ' >>> unordered_list(['States', [['Kansas', [['Lawrence', []], ['Topeka', []]]], ['Illinois', []]]]) u'\t
  • States\n\t\n\t
  • ' >>> add(u'1', u'2') 3 >>> get_digit(123, 1) 3 >>> get_digit(123, 2) 2 >>> get_digit(123, 3) 1 >>> get_digit(123, 4) 0 >>> get_digit(123, 0) 123 >>> get_digit(u'xyz', 0) u'xyz' # real testing of date() is in dateformat.py >>> date(datetime.datetime(2005, 12, 29), u"d F Y") u'29 December 2005' >>> date(datetime.datetime(2005, 12, 29), ur'jS o\f F') u'29th of December' # real testing of time() is done in dateformat.py >>> time(datetime.time(13), u"h") u'01' >>> time(datetime.time(0), u"h") u'12' # real testing is done in timesince.py, where we can provide our own 'now' >>> timesince(datetime.datetime.now() - datetime.timedelta(1)) u'1 day' >>> default(u"val", u"default") u'val' >>> default(None, u"default") u'default' >>> default(u'', u"default") u'default' >>> default_if_none(u"val", u"default") u'val' >>> default_if_none(None, u"default") u'default' >>> default_if_none(u'', u"default") u'' >>> divisibleby(4, 2) True >>> divisibleby(4, 3) False >>> yesno(True) u'yes' >>> yesno(False) u'no' >>> yesno(None) u'maybe' >>> yesno(True, u'certainly,get out of town,perhaps') u'certainly' >>> yesno(False, u'certainly,get out of town,perhaps') u'get out of town' >>> yesno(None, u'certainly,get out of town,perhaps') u'perhaps' >>> yesno(None, u'certainly,get out of town') u'get out of town' >>> filesizeformat(1023) u'1023 bytes' >>> filesizeformat(1024) u'1.0 KB' >>> filesizeformat(10*1024) u'10.0 KB' >>> filesizeformat(1024*1024-1) u'1024.0 KB' >>> filesizeformat(1024*1024) u'1.0 MB' >>> filesizeformat(1024*1024*50) u'50.0 MB' >>> filesizeformat(1024*1024*1024-1) u'1024.0 MB' >>> filesizeformat(1024*1024*1024) u'1.0 GB' >>> pluralize(1) u'' >>> pluralize(0) u's' >>> pluralize(2) u's' >>> pluralize([1]) u'' >>> pluralize([]) u's' >>> pluralize([1,2,3]) u's' >>> pluralize(1,u'es') u'' >>> pluralize(0,u'es') u'es' >>> pluralize(2,u'es') u'es' >>> pluralize(1,u'y,ies') u'y' >>> pluralize(0,u'y,ies') u'ies' >>> pluralize(2,u'y,ies') u'ies' >>> pluralize(0,u'y,ies,error') u'' >>> phone2numeric(u'0800 flowers') u'0800 3569377' # Filters shouldn't break if passed non-strings >>> addslashes(123) u'123' >>> linenumbers(123) u'1. 123' >>> lower(123) u'123' >>> make_list(123) [u'1', u'2', u'3'] >>> slugify(123) u'123' >>> title(123) u'123' >>> truncatewords(123, 2) u'123' >>> upper(123) u'123' >>> urlencode(123) u'123' >>> urlize(123) u'123' >>> urlizetrunc(123, 1) u'123' >>> wordcount(123) 1 >>> wordwrap(123, 2) u'123' >>> ljust('123', 4) u'123 ' >>> rjust('123', 4) u' 123' >>> center('123', 5) u' 123 ' >>> center('123', 6) u' 123 ' >>> cut(123, '2') u'13' >>> escape(123) u'123' >>> linebreaks(123) u'

    123

    ' >>> linebreaksbr(123) u'123' >>> removetags(123, 'a') u'123' >>> striptags(123) u'123' """ from django.template.defaultfilters import * import datetime if __name__ == '__main__': import doctest doctest.testmod()