如何创建不更改原始值的模板过滤器

Posted

技术标签:

【中文标题】如何创建不更改原始值的模板过滤器【英文标题】: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

【问题讨论】:

【参考方案1】:

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

解决方法很简单:

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

【讨论】:

以上是关于如何创建不更改原始值的模板过滤器的主要内容,如果未能解决你的问题,请参考以下文章

在 django 模板中过滤 object_list

django之模板层

在 Redux React 中传递对象以更改 [重复]

Java - Tuckee URL Rewrite 过滤器如何更改请求的 url?

如何基于选择列表过滤交互式网格?

过滤链表并返回新的链表 C