【问题标题】:How can I call a filter with more than one argument?如何调用具有多个参数的过滤器?
【发布时间】:2011-10-30 12:27:12
【问题描述】:

我需要调用具有多个参数的过滤器。

如果一个过滤器只接受一个参数,例如“cut”,我们可以用

来调用它
{{ somevariable|cut:"0" }}

但是如果我创建一个带有两个参数的自定义过滤器,我就不能用正确的语法调用它。

对于答案,我只问这个:

  • 我不想发送一个参数并在我的自定义过滤器中解析它。
  • 我也不想链接过滤器。

我认为使用两个参数调用是合法的,因为有一个名为 urlizentrunc 的默认过滤器。

def urlizetrunc(value, limit, autoescape=None):

【问题讨论】:

  • this question 的可能重复项?
  • @Spycho 我不认为这些是相同的。我跳过了你的网址,但我不知道如何以合法的方式调用 urlizentrunc(不像 Van Gale 的回答那样 hacky)。
  • 查看接受的答案。它说,对于自定义过滤器,the docs state that it cannot be done.
  • @Spycho。是的,我明白这一点。但它与自定义过滤器有关。我说“我怎样才能调用具有多个参数的过滤器?”。我提到的过滤器不仅仅是一个自定义过滤器,我用一个名为 urlizentrunk 的默认过滤器来解释它。我怎样才能用两个参数来调用它?我看不到答案。
  • 想必因为不是自定义过滤器所以不需要遵守约束自定义过滤器的规则吧?

标签: django django-templates


【解决方案1】:

你不能。唯一的解决方法是传入一个参数并将其解析为多个部分,或者在传入的过滤器之外添加一个变量。

The docs state that it cannot be done 带有自定义过滤器。更详细的解释见this question

您也不能直接将多个参数传递给非自定义过滤器,例如 urlizetrunc。 urlizetrunc 从模板中获取一个参数。通过使用参数“off”或“on”调用 autoescape 标签来设置 autoescape。当您从模板调用 urlizetrunc 时,它会传入 autoescape 设置的任何值。您不能直接从模板中传入 autoescape 的值。更详细的解释见this question

【讨论】:

    【解决方案2】:

    你必须接受一个参数然后解析它。 autoescape 参数有点特殊,因为它存在于您的过滤器需要知道自动转义是打开还是关闭的情况下。欲了解更多信息,请查看此链接:https://docs.djangoproject.com/en/1.3/howto/custom-template-tags/#filters-and-auto-escaping

    但是在自定义过滤器中解析参数并不难,通常只是在做argument.split(" ")argument.split(",")

    【讨论】:

      猜你喜欢
      • 2013-04-20
      • 2018-04-11
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 2016-12-30
      • 1970-01-01
      • 2015-12-08
      相关资源
      最近更新 更多