|
@@ -66,18 +66,21 @@ def addslashes(value):
|
|
|
"""
|
|
|
return value.replace('\\', '\\\\').replace('"', '\\"').replace("'", "\\'")
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def capfirst(value):
|
|
|
"""Capitalizes the first character of the value."""
|
|
|
return value and value[0].upper() + value[1:]
|
|
|
|
|
|
+
|
|
|
@register.filter("escapejs")
|
|
|
@stringfilter
|
|
|
def escapejs_filter(value):
|
|
|
"""Hex encodes characters for use in JavaScript strings."""
|
|
|
return escapejs(value)
|
|
|
|
|
|
+
|
|
|
@register.filter("fix_ampersands", is_safe=True)
|
|
|
@stringfilter
|
|
|
def fix_ampersands_filter(value):
|
|
@@ -96,6 +99,7 @@ neg_inf = -1e200 * 1e200
|
|
|
nan = (1e200 * 1e200) // (1e200 * 1e200)
|
|
|
special_floats = [str(pos_inf), str(neg_inf), str(nan)]
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
def floatformat(text, arg=-1):
|
|
|
"""
|
|
@@ -179,12 +183,14 @@ def floatformat(text, arg=-1):
|
|
|
except InvalidOperation:
|
|
|
return input_val
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def iriencode(value):
|
|
|
"""Escapes an IRI value for use in a URL."""
|
|
|
return force_text(iri_to_uri(value))
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True, needs_autoescape=True)
|
|
|
@stringfilter
|
|
|
def linenumbers(value, autoescape=None):
|
|
@@ -201,12 +207,14 @@ def linenumbers(value, autoescape=None):
|
|
|
lines[i] = ("%0" + width + "d. %s") % (i + 1, escape(line))
|
|
|
return mark_safe('\n'.join(lines))
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def lower(value):
|
|
|
"""Converts a string into all lowercase."""
|
|
|
return value.lower()
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=False)
|
|
|
@stringfilter
|
|
|
def make_list(value):
|
|
@@ -218,6 +226,7 @@ def make_list(value):
|
|
|
"""
|
|
|
return list(value)
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def slugify(value):
|
|
@@ -229,6 +238,7 @@ def slugify(value):
|
|
|
from django.utils.text import slugify
|
|
|
return slugify(value)
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
def stringformat(value, arg):
|
|
|
"""
|
|
@@ -245,6 +255,7 @@ def stringformat(value, arg):
|
|
|
except (ValueError, TypeError):
|
|
|
return ""
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def title(value):
|
|
@@ -252,6 +263,7 @@ def title(value):
|
|
|
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)
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def truncatechars(value, arg):
|
|
@@ -266,6 +278,7 @@ def truncatechars(value, arg):
|
|
|
return value # Fail silently.
|
|
|
return Truncator(value).chars(length)
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def truncatewords(value, arg):
|
|
@@ -282,6 +295,7 @@ def truncatewords(value, arg):
|
|
|
return value # Fail silently.
|
|
|
return Truncator(value).words(length, truncate=' ...')
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def truncatewords_html(value, arg):
|
|
@@ -298,12 +312,14 @@ def truncatewords_html(value, arg):
|
|
|
return value # Fail silently.
|
|
|
return Truncator(value).words(length, html=True, truncate=' ...')
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=False)
|
|
|
@stringfilter
|
|
|
def upper(value):
|
|
|
"""Converts a string into all uppercase."""
|
|
|
return value.upper()
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=False)
|
|
|
@stringfilter
|
|
|
def urlencode(value, safe=None):
|
|
@@ -320,12 +336,14 @@ def urlencode(value, safe=None):
|
|
|
kwargs['safe'] = safe
|
|
|
return urlquote(value, **kwargs)
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True, needs_autoescape=True)
|
|
|
@stringfilter
|
|
|
def urlize(value, autoescape=None):
|
|
|
"""Converts URLs in plain text into clickable links."""
|
|
|
return mark_safe(urlize_impl(value, nofollow=True, autoescape=autoescape))
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True, needs_autoescape=True)
|
|
|
@stringfilter
|
|
|
def urlizetrunc(value, limit, autoescape=None):
|
|
@@ -338,12 +356,14 @@ def urlizetrunc(value, limit, autoescape=None):
|
|
|
return mark_safe(urlize_impl(value, trim_url_limit=int(limit), nofollow=True,
|
|
|
autoescape=autoescape))
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=False)
|
|
|
@stringfilter
|
|
|
def wordcount(value):
|
|
|
"""Returns the number of words."""
|
|
|
return len(value.split())
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def wordwrap(value, arg):
|
|
@@ -354,6 +374,7 @@ def wordwrap(value, arg):
|
|
|
"""
|
|
|
return wrap(value, int(arg))
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def ljust(value, arg):
|
|
@@ -364,6 +385,7 @@ def ljust(value, arg):
|
|
|
"""
|
|
|
return value.ljust(int(arg))
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def rjust(value, arg):
|
|
@@ -374,12 +396,14 @@ def rjust(value, arg):
|
|
|
"""
|
|
|
return value.rjust(int(arg))
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def center(value, arg):
|
|
|
"""Centers the value in a field of a given width."""
|
|
|
return value.center(int(arg))
|
|
|
|
|
|
+
|
|
|
@register.filter
|
|
|
@stringfilter
|
|
|
def cut(value, arg):
|
|
@@ -392,6 +416,7 @@ def cut(value, arg):
|
|
|
return mark_safe(value)
|
|
|
return value
|
|
|
|
|
|
+
|
|
|
###################
|
|
|
# HTML STRINGS #
|
|
|
###################
|
|
@@ -404,6 +429,7 @@ def escape_filter(value):
|
|
|
"""
|
|
|
return mark_for_escaping(value)
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def force_escape(value):
|
|
@@ -414,6 +440,7 @@ def force_escape(value):
|
|
|
"""
|
|
|
return escape(value)
|
|
|
|
|
|
+
|
|
|
@register.filter("linebreaks", is_safe=True, needs_autoescape=True)
|
|
|
@stringfilter
|
|
|
def linebreaks_filter(value, autoescape=None):
|
|
@@ -425,6 +452,7 @@ def linebreaks_filter(value, autoescape=None):
|
|
|
autoescape = autoescape and not isinstance(value, SafeData)
|
|
|
return mark_safe(linebreaks(value, autoescape))
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True, needs_autoescape=True)
|
|
|
@stringfilter
|
|
|
def linebreaksbr(value, autoescape=None):
|
|
@@ -438,6 +466,7 @@ def linebreaksbr(value, autoescape=None):
|
|
|
value = escape(value)
|
|
|
return mark_safe(value.replace('\n', '<br />'))
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def safe(value):
|
|
@@ -446,6 +475,7 @@ def safe(value):
|
|
|
"""
|
|
|
return mark_safe(value)
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
def safeseq(value):
|
|
|
"""
|
|
@@ -455,6 +485,7 @@ def safeseq(value):
|
|
|
"""
|
|
|
return [mark_safe(force_text(obj)) for obj in value]
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def removetags(value, tags):
|
|
@@ -462,12 +493,14 @@ def removetags(value, tags):
|
|
|
from django.utils.html import remove_tags
|
|
|
return remove_tags(value, tags)
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
@stringfilter
|
|
|
def striptags(value):
|
|
|
"""Strips all [X]HTML tags."""
|
|
|
return strip_tags(value)
|
|
|
|
|
|
+
|
|
|
###################
|
|
|
# LISTS #
|
|
|
###################
|
|
@@ -483,6 +516,7 @@ def dictsort(value, arg):
|
|
|
except (TypeError, VariableDoesNotExist):
|
|
|
return ''
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=False)
|
|
|
def dictsortreversed(value, arg):
|
|
|
"""
|
|
@@ -494,6 +528,7 @@ def dictsortreversed(value, arg):
|
|
|
except (TypeError, VariableDoesNotExist):
|
|
|
return ''
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=False)
|
|
|
def first(value):
|
|
|
"""Returns the first item in a list."""
|
|
@@ -502,6 +537,7 @@ def first(value):
|
|
|
except IndexError:
|
|
|
return ''
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True, needs_autoescape=True)
|
|
|
def join(value, arg, autoescape=None):
|
|
|
"""
|
|
@@ -516,6 +552,7 @@ def join(value, arg, autoescape=None):
|
|
|
return value
|
|
|
return mark_safe(data)
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
def last(value):
|
|
|
"Returns the last item in a list"
|
|
@@ -524,6 +561,7 @@ def last(value):
|
|
|
except IndexError:
|
|
|
return ''
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
def length(value):
|
|
|
"""Returns the length of the value - useful for lists."""
|
|
@@ -532,6 +570,7 @@ def length(value):
|
|
|
except (ValueError, TypeError):
|
|
|
return ''
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=False)
|
|
|
def length_is(value, arg):
|
|
|
"""Returns a boolean of whether the value's length is the argument."""
|
|
@@ -540,11 +579,13 @@ def length_is(value, arg):
|
|
|
except (ValueError, TypeError):
|
|
|
return ''
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
def random(value):
|
|
|
"""Returns a random item from the list."""
|
|
|
return random_module.choice(value)
|
|
|
|
|
|
+
|
|
|
@register.filter("slice", is_safe=True)
|
|
|
def slice_filter(value, arg):
|
|
|
"""
|
|
@@ -566,6 +607,7 @@ def slice_filter(value, arg):
|
|
|
except (ValueError, TypeError):
|
|
|
return value # Fail silently.
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True, needs_autoescape=True)
|
|
|
def unordered_list(value, autoescape=None):
|
|
|
"""
|
|
@@ -655,6 +697,7 @@ def unordered_list(value, autoescape=None):
|
|
|
value, converted = convert_old_style_list(value)
|
|
|
return mark_safe(_helper(value))
|
|
|
|
|
|
+
|
|
|
###################
|
|
|
# INTEGERS #
|
|
|
###################
|
|
@@ -670,6 +713,7 @@ def add(value, arg):
|
|
|
except Exception:
|
|
|
return ''
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=False)
|
|
|
def get_digit(value, arg):
|
|
|
"""
|
|
@@ -690,6 +734,7 @@ def get_digit(value, arg):
|
|
|
except IndexError:
|
|
|
return 0
|
|
|
|
|
|
+
|
|
|
###################
|
|
|
# DATES #
|
|
|
###################
|
|
@@ -709,6 +754,7 @@ def date(value, arg=None):
|
|
|
except AttributeError:
|
|
|
return ''
|
|
|
|
|
|
+
|
|
|
@register.filter(expects_localtime=True, is_safe=False)
|
|
|
def time(value, arg=None):
|
|
|
"""Formats a time according to the given format."""
|
|
@@ -724,6 +770,7 @@ def time(value, arg=None):
|
|
|
except AttributeError:
|
|
|
return ''
|
|
|
|
|
|
+
|
|
|
@register.filter("timesince", is_safe=False)
|
|
|
def timesince_filter(value, arg=None):
|
|
|
"""Formats a date as the time since that date (i.e. "4 days, 6 hours")."""
|
|
@@ -736,6 +783,7 @@ def timesince_filter(value, arg=None):
|
|
|
except (ValueError, TypeError):
|
|
|
return ''
|
|
|
|
|
|
+
|
|
|
@register.filter("timeuntil", is_safe=False)
|
|
|
def timeuntil_filter(value, arg=None):
|
|
|
"""Formats a date as the time until that date (i.e. "4 days, 6 hours")."""
|
|
@@ -746,6 +794,7 @@ def timeuntil_filter(value, arg=None):
|
|
|
except (ValueError, TypeError):
|
|
|
return ''
|
|
|
|
|
|
+
|
|
|
###################
|
|
|
# LOGIC #
|
|
|
###################
|
|
@@ -755,6 +804,7 @@ def default(value, arg):
|
|
|
"""If value is unavailable, use given default."""
|
|
|
return value or arg
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=False)
|
|
|
def default_if_none(value, arg):
|
|
|
"""If value is None, use given default."""
|
|
@@ -762,11 +812,13 @@ def default_if_none(value, arg):
|
|
|
return arg
|
|
|
return value
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=False)
|
|
|
def divisibleby(value, arg):
|
|
|
"""Returns True if the value is devisible by the argument."""
|
|
|
return int(value) % int(arg) == 0
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=False)
|
|
|
def yesno(value, arg=None):
|
|
|
"""
|
|
@@ -799,6 +851,7 @@ def yesno(value, arg=None):
|
|
|
return yes
|
|
|
return no
|
|
|
|
|
|
+
|
|
|
###################
|
|
|
# MISC #
|
|
|
###################
|
|
@@ -838,6 +891,7 @@ def filesizeformat(bytes):
|
|
|
|
|
|
return avoid_wrapping(value)
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=False)
|
|
|
def pluralize(value, arg='s'):
|
|
|
"""
|
|
@@ -882,11 +936,13 @@ def pluralize(value, arg='s'):
|
|
|
pass
|
|
|
return singular_suffix
|
|
|
|
|
|
+
|
|
|
@register.filter("phone2numeric", is_safe=True)
|
|
|
def phone2numeric_filter(value):
|
|
|
"""Takes a phone number and converts it in to its numerical equivalent."""
|
|
|
return phone2numeric(value)
|
|
|
|
|
|
+
|
|
|
@register.filter(is_safe=True)
|
|
|
def pprint(value):
|
|
|
"""A wrapper around pprint.pprint -- for debugging, really."""
|