【问题标题】:Django templates built-in filters: Using a variable value in an argumentDjango 模板内置过滤器:在参数中使用变量值
【发布时间】:2013-10-29 16:06:17
【问题描述】:
使用 Django 内置的yesno 过滤器,我需要插入以下值之一:
- “我”这个词
- 变量
owner_name的值
这是我尝试在模板中使用的代码:
"Look what {{ is_owner|yesno:"I,{{ owner_name }}" }} created!"
使用上面的代码会导致以下错误:
无法解析余数:':"I,{{ owner_name' from
'is_owner|yesno:"我,{{ owner_name'
那么如何在过滤器的参数中转义变量?
【问题讨论】:
标签:
python
django
django-templates
【解决方案1】:
您可以做的另一件事是使用with 模板标签和add 过滤器连接参数:
{% with yesno_args="I,"|add:owner_name %}
"Look what {{ is_owner|yesno:yesno_args }} created!"
{% endwith %}
我认为这比添加自定义过滤器要简单。
【解决方案2】:
你可以创建一个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 %}您的自定义过滤器。