Opened 4 years ago

Last modified 4 years ago

#32526 closed Bug

Class based custom template filters seem to be broken since Django 2.0 — at Initial Version

Reported by: 884756834 Owned by: nobody
Component: Template system Version: 3.1
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

In Django 1.10, writing a custom template filter using a class used to work:

Code highlighting:

class MyCustomFilter(object):
    __name__ = 'custom_filter'

    def __call__(self, value):
        if not isinstance(value, str):
            return value

        return MyHelperClass(value).do_stuff()

def custom_filter(value) = MyCustomFilter()

But in Django 2.2 (and likely from 2.0 to 3.1) this seems to raise an error:

django.template.exceptions.TemplateSyntaxError: "requires 2 arguments, 1 provided"

I believe it is caused by the changes in one of, or both, these 2 commits:

https://github.com/django/django/commit/c2a1af883e18b93a77080650feb9e959536d51ca
https://github.com/django/django/commit/620e9dd31a2146d70de740f96a8cb9a6db054fc7

As a workaround, I've been able to rewrite it:

Code highlighting:

def custom_filter(value):
    if not isinstance(value, str):
        return value

    return MyHelperClass(value).do_stuff()

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top