Fixes #15732 -- better introduction of template filter decorator concepts (first register, then stringfilter). Thanks for the patch, hahasee.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16251 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
90e8e48239
commit
803a454aef
|
@ -105,23 +105,6 @@ your function. Example::
|
||||||
"Converts a string into all lowercase"
|
"Converts a string into all lowercase"
|
||||||
return value.lower()
|
return value.lower()
|
||||||
|
|
||||||
Template filters that expect strings
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
If you're writing a template filter that only expects a string as the first
|
|
||||||
argument, you should use the decorator ``stringfilter``. This will
|
|
||||||
convert an object to its string value before being passed to your function::
|
|
||||||
|
|
||||||
from django.template.defaultfilters import stringfilter
|
|
||||||
|
|
||||||
@stringfilter
|
|
||||||
def lower(value):
|
|
||||||
return value.lower()
|
|
||||||
|
|
||||||
This way, you'll be able to pass, say, an integer to this filter, and it
|
|
||||||
won't cause an ``AttributeError`` (because integers don't have ``lower()``
|
|
||||||
methods).
|
|
||||||
|
|
||||||
Registering custom filters
|
Registering custom filters
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -140,17 +123,36 @@ The ``Library.filter()`` method takes two arguments:
|
||||||
You can use ``register.filter()`` as a decorator instead::
|
You can use ``register.filter()`` as a decorator instead::
|
||||||
|
|
||||||
@register.filter(name='cut')
|
@register.filter(name='cut')
|
||||||
@stringfilter
|
|
||||||
def cut(value, arg):
|
def cut(value, arg):
|
||||||
return value.replace(arg, '')
|
return value.replace(arg, '')
|
||||||
|
|
||||||
|
@register.filter
|
||||||
|
def lower(value):
|
||||||
|
return value.lower()
|
||||||
|
|
||||||
|
If you leave off the ``name`` argument, as in the second example above, Django
|
||||||
|
will use the function's name as the filter name.
|
||||||
|
|
||||||
|
Template filters that expect strings
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
If you're writing a template filter that only expects a string as the first
|
||||||
|
argument, you should use the decorator ``stringfilter``. This will
|
||||||
|
convert an object to its string value before being passed to your function::
|
||||||
|
|
||||||
|
from django import template
|
||||||
|
from django.template.defaultfilters import stringfilter
|
||||||
|
|
||||||
|
register = template.Library()
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
@stringfilter
|
@stringfilter
|
||||||
def lower(value):
|
def lower(value):
|
||||||
return value.lower()
|
return value.lower()
|
||||||
|
|
||||||
If you leave off the ``name`` argument, as in the second example above, Django
|
This way, you'll be able to pass, say, an integer to this filter, and it
|
||||||
will use the function's name as the filter name.
|
won't cause an ``AttributeError`` (because integers don't have ``lower()``
|
||||||
|
methods).
|
||||||
|
|
||||||
Filters and auto-escaping
|
Filters and auto-escaping
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
Loading…
Reference in New Issue