File tree Expand file tree Collapse file tree 2 files changed +45
-5
lines changed Expand file tree Collapse file tree 2 files changed +45
-5
lines changed Original file line number Diff line number Diff line change @@ -662,20 +662,36 @@ def add_url_rule(
662
662
663
663
@setupmethod
664
664
def template_filter (
665
- self , name : str | None = None
666
- ) -> t .Callable [[T_template_filter ], T_template_filter ]:
665
+ self , name : t . Callable [..., t . Any ] | str | None = None
666
+ ) -> t .Callable [[T_template_filter ], T_template_filter ] | T_template_filter :
667
667
"""A decorator that is used to register custom template filter.
668
668
You can specify a name for the filter, otherwise the function
669
669
name will be used. Example::
670
670
671
- @app.template_filter()
672
- def reverse(s):
673
- return s[::-1]
671
+ @app.template_filter()
672
+ def reverse(s):
673
+ return s[::-1]
674
+
675
+ The decorator also can be used without parentheses::
676
+
677
+ @app.template_filter
678
+ def reverse(s):
679
+ return s[::-1]
674
680
675
681
:param name: the optional name of the filter, otherwise the
676
682
function name will be used.
677
683
"""
678
684
685
+ if callable (name ):
686
+ # If name is callable, it is the function to register.
687
+ # This is a shortcut for the common case of
688
+ # @app.template_filter
689
+ # def func():
690
+
691
+ func = name
692
+ self .add_template_filter (func )
693
+ return func
694
+
679
695
def decorator (f : T_template_filter ) -> T_template_filter :
680
696
self .add_template_filter (f , name = name )
681
697
return f
Original file line number Diff line number Diff line change @@ -129,6 +129,30 @@ def my_reverse(s):
129
129
assert app .jinja_env .filters ["my_reverse" ] == my_reverse
130
130
assert app .jinja_env .filters ["my_reverse" ]("abcd" ) == "dcba"
131
131
132
+ @app .template_filter
133
+ def my_reverse_2 (s ):
134
+ return s [::- 1 ]
135
+
136
+ assert "my_reverse_2" in app .jinja_env .filters .keys ()
137
+ assert app .jinja_env .filters ["my_reverse_2" ] == my_reverse_2
138
+ assert app .jinja_env .filters ["my_reverse_2" ]("abcd" ) == "dcba"
139
+
140
+ @app .template_filter ("my_reverse_custom_name" )
141
+ def my_reverse_3 (s ):
142
+ return s [::- 1 ]
143
+
144
+ assert "my_reverse_custom_name" in app .jinja_env .filters .keys ()
145
+ assert app .jinja_env .filters ["my_reverse_custom_name" ] == my_reverse_3
146
+ assert app .jinja_env .filters ["my_reverse_custom_name" ]("abcd" ) == "dcba"
147
+
148
+ @app .template_filter (name = "my_reverse_custom_name_2" )
149
+ def my_reverse_4 (s ):
150
+ return s [::- 1 ]
151
+
152
+ assert "my_reverse_custom_name_2" in app .jinja_env .filters .keys ()
153
+ assert app .jinja_env .filters ["my_reverse_custom_name_2" ] == my_reverse_4
154
+ assert app .jinja_env .filters ["my_reverse_custom_name_2" ]("abcd" ) == "dcba"
155
+
132
156
133
157
def test_add_template_filter (app ):
134
158
def my_reverse (s ):
You can’t perform that action at this time.
0 commit comments