为什么jinja2 Loop没有输出?
Why is there no output in jinja2 Loop?
我尝试在我的神社模板中循环一个 dic。但是我总是没有输出。
dic={"SERVICE1" : "tess","SERVICE2" : "test"}
with open(Path(Path.cwd()/"test.jinja")) as f:
template = Template(f.read()).render(data_nebula_docker)
print(template)
我的模板是这样的:
{% for item in dic %}
{{item}}
{% endfor %}
普通变量工作正常。我有一些基本的误解吗?
感谢您的帮助!
您的代码有几个问题。我假设您的 with
语句中的缩进问题只是一个 copy-and-paste 错误,并且您的代码实际上看起来像:
with open(Path(Path.cwd()/"test.jinja")) as f:
template = Template(f.read()).render(data_nebula_docker)
print(template)
在您的模板中,您引用了一个变量 dic
,但您没有将其传递给 render
方法。你想要:
from jinja2 import Template
from pathlib import Path
dic = {"SERVICE1": "tess", "SERVICE2": "test"}
with open(Path(Path.cwd() / "test.jinja")) as f:
template = Template(f.read()).render(dic=dic)
print(template)
产生:
SERVICE1
SERVICE2
您会注意到这只会打印出字典中的键。当您遍历字典时(在 Jinja 或 Python 中),您会得到一个键列表。如果您想要 (key, value)
元组,请使用 .items()
方法:
{% for item in dic.items() %}
{{item}}
{% endfor %}
产生:
('SERVICE1', 'tess')
('SERVICE2', 'test')
另外,您对 pathlib.Path
的使用有点费解;你可以这样写:
with (Path.cwd()/"test.jinja").open() as f:
在上面:
- 没有必要将
Path() / "string"
的结果包装在对 Path()
的调用中(因为它已经是 Path
)
- 一个
Path
对象有一个 open
方法,所以我们可以在 Path.cwd()/"test.jinja"
.[=52= 产生的 Path
上调用 .open()
]
虽然在这种情况下,您的基于 pathlib
的代码并不能赢得胜利:
with open("test.jinja") as f:
我尝试在我的神社模板中循环一个 dic。但是我总是没有输出。
dic={"SERVICE1" : "tess","SERVICE2" : "test"}
with open(Path(Path.cwd()/"test.jinja")) as f:
template = Template(f.read()).render(data_nebula_docker)
print(template)
我的模板是这样的:
{% for item in dic %}
{{item}}
{% endfor %}
普通变量工作正常。我有一些基本的误解吗? 感谢您的帮助!
您的代码有几个问题。我假设您的 with
语句中的缩进问题只是一个 copy-and-paste 错误,并且您的代码实际上看起来像:
with open(Path(Path.cwd()/"test.jinja")) as f:
template = Template(f.read()).render(data_nebula_docker)
print(template)
在您的模板中,您引用了一个变量 dic
,但您没有将其传递给 render
方法。你想要:
from jinja2 import Template
from pathlib import Path
dic = {"SERVICE1": "tess", "SERVICE2": "test"}
with open(Path(Path.cwd() / "test.jinja")) as f:
template = Template(f.read()).render(dic=dic)
print(template)
产生:
SERVICE1
SERVICE2
您会注意到这只会打印出字典中的键。当您遍历字典时(在 Jinja 或 Python 中),您会得到一个键列表。如果您想要 (key, value)
元组,请使用 .items()
方法:
{% for item in dic.items() %}
{{item}}
{% endfor %}
产生:
('SERVICE1', 'tess')
('SERVICE2', 'test')
另外,您对 pathlib.Path
的使用有点费解;你可以这样写:
with (Path.cwd()/"test.jinja").open() as f:
在上面:
- 没有必要将
Path() / "string"
的结果包装在对Path()
的调用中(因为它已经是Path
) - 一个
Path
对象有一个open
方法,所以我们可以在Path.cwd()/"test.jinja"
.[=52= 产生的Path
上调用.open()
]
虽然在这种情况下,您的基于 pathlib
的代码并不能赢得胜利:
with open("test.jinja") as f: