我需要调用一个包含多个参数的过滤器。
如果过滤器只接受一个参数,例如“cut”,我们可以用
调用它{{ somevariable|cut:"0" }}
但是如果我创建一个带有两个参数的自定义过滤器,我就无法用正确的语法调用它。
对于答案,我只问这个:
我认为使用两个参数调用是合法的,因为有一个名为urlizentrunc的默认过滤器。
def urlizetrunc(value, limit, autoescape=None):
答案 0 :(得分:3)
你做不到。唯一的解决方法是传入一个参数并将其解析为部分,或者在传入的过滤器外部使用变量。
带自定义过滤器的The docs state that it cannot be done。有关更详细的说明,请参阅this question。
您无法直接将多个参数传递给非自定义过滤器,例如urlizetrunc。 urlizetrunc从模板中获取一个参数。通过使用参数“off”或“on”调用autoescape标记来设置autoescape。当您从模板调用urlizetrunc时,它会传入autoescape设置为的任何值。您无法直接从模板传递autoescape的值。有关更详细的说明,请参阅this question。
答案 1 :(得分:1)
你将不得不接受一个参数,然后解析它。 autoescape
参数有点特殊,因为在过滤器需要知道自动启动是打开还是关闭的情况下。有关详细信息,请查看以下链接:https://docs.djangoproject.com/en/1.3/howto/custom-template-tags/#filters-and-auto-escaping
但是在自定义过滤器中解析参数并不难,通常它只是在执行argument.split(" ")
或argument.split(",")