【问题标题】:Django templates built-in filters: Using a variable value in an argumentDjango 模板内置过滤器:在参数中使用变量值
【发布时间】:2013-10-29 16:06:17
【问题描述】:

使用 Django 内置的yesno 过滤器,我需要插入以下值之一:

  1. “我”这个词
  2. 变量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 %}您的自定义过滤器。

      【讨论】:

        猜你喜欢
        • 2023-03-26
        • 2017-10-03
        • 2011-07-31
        • 1970-01-01
        • 2019-09-28
        • 2010-10-28
        • 2012-04-05
        • 1970-01-01
        • 2020-04-09
        相关资源
        最近更新 更多