gpt4 book ai didi

python - Jinja2 - 复制变量而不是引用它

转载 作者:行者123 更新时间:2023-12-05 01:41:17 26 4
gpt4 key购买 nike

我希望能够在 Jinja2 (2.10) 中复制一个变量,而不仅仅是引用它,但找不到实现它的方法。

请看下面的例子:

from jinja2 import Environment
from jinja2.ext import do
env = Environment(extensions=[do])
template = env.from_string('''
{%- set base = {"elems": {"a": "aa"}} -%}
{%- set data = {"elems": base.elems} -%}
{%- do data.elems.update({"a": "bb"}) -%}
{{ base.elems.a }} - "aa" expected
{{ data.elems.a }} - "bb" expected
''')
template.render()

结果是:'bb - "aa"expected\nbb - "bb"expected'

所以这意味着 data.elems 不是 base.elems 的副本,而是对它的引用。我需要在 data.elems 中有一个 base.elems 的副本。

我试过:

  • base.get('元素')
  • base|attr('元素')

但这些都不起作用。有什么方法可以在 Jinja2 中复制值吗?

最佳答案

$ python q54718238.py
aa - "aa" expected
bb - "bb" expected

诀窍是知道很多 Python 的数据类型都是引用。因此,在对象上调用 copy() 可以修复它。请注意,我将 {%- set data = {"elems": base.elems} -%} 更改为 {%- set data = {"elems": base.elems.copy( )} -%}.

from jinja2 import Environment
from jinja2.ext import do
env = Environment(extensions=[do])
template = env.from_string('''
{%- set base = {"elems": {"a": "aa"}} -%}
{%- set data = {"elems": base.elems.copy()} -%}
{%- do data.elems.update({"a": "bb"}) -%}
{{ base.elems.a }} - "aa" expected
{{ data.elems.a }} - "bb" expected
''')
print(template.render())

关于python - Jinja2 - 复制变量而不是引用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54718238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com