Django模板内置过滤器:在参数中使用变量值

时间:2013-10-29 16:06:18

标签: python django django-templates

使用Django的内置yesno过滤器,我需要插入其中一个值:

  1. “我”这个词
  2. 变量owner_name
  3. 的值

    以下是我在模板中尝试使用的代码:

    "Look what {{ is_owner|yesno:"I,{{ owner_name }}" }} created!"
    

    使用上面的代码会导致以下错误:

      

    无法解析余数:':“我,{{owner_name'来自   'is_owner | yesno:“我,{{owner_name'

    那么如何在过滤器的参数中转义变量呢?

2 个答案:

答案 0 :(得分:5)

您可以做的另一件事是使用with模板标记和add过滤器连接参数:

{% with yesno_args="I,"|add:owner_name %}
"Look what {{ is_owner|yesno:yesno_args }} created!"
{% endwith %}

我认为这比必须添加自定义过滤器更简单。

答案 1 :(得分:1)

您可以创建custom filter来执行您想要的操作。

看起来像{{ is_owner|my_yesno:owner_name }}

使用自定义过滤器

from django.template.defaultfilters import yesno

def my_yesno(value, arg):
   yes_no_list = ['I', arg]
   return yesno(value, yes_no_list)

这将允许您在包装器my_yesno中创建列表时重用yesno。如果你想要做一些不同的事情,你也可以编写自己的逻辑。请务必{% load %}自定义过滤器。