繁体   English   中英

jinja2.exceptions.UndefinedError与Python dict

[英]jinja2.exceptions.UndefinedError with Python dict

我正在尝试从CSV文件创建的python dict渲染jinja2模板,但是jinja2对该dict采取了例外措施,我不明白为什么。

这是模板:

{% for key, value in hostname.iteritems() %}
interface {{ key }}
 description {{ value }}
{% endfor %}

这是python代码:

import csv
from pprint import pprint
import os
import jinja2

CSVDATA_FILENAME = 'port_descriptions.csv'
TEMPLATE_FILENAME = 'cisco.j2'
hostnames = []

env = jinja2.Environment(
    loader=jinja2.FileSystemLoader(os.getcwd()),
    trim_blocks=True, lstrip_blocks=True)
template = env.get_template(TEMPLATE_FILENAME)

for row in csv.DictReader(open(CSVDATA_FILENAME)):
    if row['hostname'] not in hostnames:
        hostnames.append(row['hostname'])

for hostname in hostnames:
    x = hostname
    hostname = {}
    for row in csv.DictReader(open(CSVDATA_FILENAME)):
        if x == row['hostname']:
            hostname[row['port']] = row['des']
    pprint(hostname)
    print template.render(hostname)

在倒数第二行(pprint(hostname)) ,代码将根据需要打印主机名字典,因此我知道它们在其中,但jinja2不会渲染它们。 我是否在模板中缺少明显的内容?
据我所见,我的代码遵循此原则-http://keepingitclassless.net/2014/03/network-config-templates-jinja2/非常接近,但我必须忽略某些内容?

查看文档中的此示例 ,您可能需要将字典作为命名的关键字参数传递,如下所示: print template.render(hostname=hostname)

注意,只有等号左侧的部分与模板有关; 您只需要执行template.render(hostname={'testy': 'testy'}) ,相同的模板就可以继续工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM