【问题标题】:How to create template filters that don't change original value如何创建不更改原始值的模板过滤器
【发布时间】:2013-11-01 02:59:32
【问题描述】:

我想创建不改变应用它们的变量的原始值的过滤器。

这是一个非常简单的过滤器:

def increment(mynumber):
    return mynumber + 1

JINJA_ENVIRONMENT.filters['increment'] = increment

如果在模板中我有类似的东西:

{% set anumber = 10 %}
<span>first: {{ anumber|increment }}</span>
<span>second: {{ anumber|increment }}</span>

我希望看到显示:

first: 11
second: 11

相反,我得到:

first: 11
second: 12

我怎样才能达到第一种类型的结果? 我也可以这样做,以便链接过滤器将传递新值吗? 例如:

<span>first: {{ anumber|increment|increment|increment }}</span>
<span>second: {{ anumber|increment }}</span>

会输出

first: 13
second: 11

【问题讨论】:

    标签: python django-templates jinja2 django-template-filters


    【解决方案1】:

    真的很抱歉,我不知道在python中变量是通过引用而不是通过值分配的。而且我的例子太简单了:我实际上是在处理字典。

    解决方法很简单:

    def myFilter(myDict):
        returnDict = myDict.copy()
        # change returnDict ..
        return returnDict
    

    【讨论】:

      猜你喜欢
      • 2012-08-18
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2021-04-15
      • 2011-09-05
      • 2012-06-29
      • 1970-01-01
      相关资源
      最近更新 更多