如何创建不更改原始值的模板筛选器

时间:2013-10-23 01:57:37

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

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

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

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

1 个答案:

答案 0 :(得分:-1)

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

解决方案很简单:

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