Browse Source

add a decorator to add custom template filter

pull/1638/head
Sebastien Estienne 15 years ago committed by Armin Ronacher
parent
commit
a9bb965b6d
  1. 22
      flask.py
  2. 26
      tests/flask_tests.py

22
flask.py

@ -12,6 +12,7 @@
from __future__ import with_statement from __future__ import with_statement
import os import os
import sys import sys
import types
from jinja2 import Environment, PackageLoader, FileSystemLoader from jinja2 import Environment, PackageLoader, FileSystemLoader
from werkzeug import Request as RequestBase, Response as ResponseBase, \ from werkzeug import Request as RequestBase, Response as ResponseBase, \
@ -639,6 +640,27 @@ class Flask(object):
return f return f
return decorator return decorator
def template_filter(self, arg=None):
"""A decorator that is used to register custom template filter.
You can specify a name for the filter, otherwise the function
name will be used. Example::
@app.template_filter
def reverse(s):
return s[::-1]
:param name: the optional name of the filter, otherwise the
function name will be used.
"""
if type(arg) is types.FunctionType:
self.jinja_env.filters[arg.__name__] = arg
return arg
def decorator(f):
self.jinja_env.filters[arg or f.__name__] = f
return f
return decorator
def before_request(self, f): def before_request(self, f):
"""Registers a function to run before each request.""" """Registers a function to run before each request."""
self.before_request_funcs.append(f) self.before_request_funcs.append(f)

26
tests/flask_tests.py

@ -311,6 +311,32 @@ class TemplatingTestCase(unittest.TestCase):
macro = flask.get_template_attribute('_macro.html', 'hello') macro = flask.get_template_attribute('_macro.html', 'hello')
assert macro('World') == 'Hello World!' assert macro('World') == 'Hello World!'
def test_template_filter_not_called(self):
app = flask.Flask(__name__)
@app.template_filter
def my_reverse(s):
return s[::-1]
assert 'my_reverse' in app.jinja_env.filters.keys()
assert app.jinja_env.filters['my_reverse'] == my_reverse
assert app.jinja_env.filters['my_reverse']('abcd') == 'dcba'
def test_template_filter_called(self):
app = flask.Flask(__name__)
@app.template_filter()
def my_reverse(s):
return s[::-1]
assert 'my_reverse' in app.jinja_env.filters.keys()
assert app.jinja_env.filters['my_reverse'] == my_reverse
assert app.jinja_env.filters['my_reverse']('abcd') == 'dcba'
def test_template_filter_with_name(self):
app = flask.Flask(__name__)
@app.template_filter('strrev')
def my_reverse(s):
return s[::-1]
assert 'strrev' in app.jinja_env.filters.keys()
assert app.jinja_env.filters['strrev'] == my_reverse
assert app.jinja_env.filters['strrev']('abcd') == 'dcba'
def suite(): def suite():
from minitwit_tests import MiniTwitTestCase from minitwit_tests import MiniTwitTestCase

Loading…
Cancel
Save