【问题标题】:jinja2.exceptions.UndefinedError with Python dictjinja2.exceptions.UndefinedError 与 Python 字典
【发布时间】:2015-03-18 10:22:07
【问题描述】:

我正在尝试从从 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/ 非常接近,但我必须忽略一些东西?

【问题讨论】:

    标签: python csv dictionary jinja2


    【解决方案1】:

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

    注意,只有等号左边的部分与模板相关;你可以只做template.render(hostname={'testy': 'testy'}),同样的模板会继续工作。

    【讨论】:

    • 谢谢@Underyx 我只是假设 jinja2 会知道我指的是什么。所以,只是为了确保我理解;它是 jinja2 模板引用的左侧的“主机名”,而不是引用 python 脚本中 dict 的主机名(然后可以将其称为任何东西,即 foo,只要 template.render(hostname= foo) )?
    • @RMPhoenix 是正确的。这是因为 Python 的工作原理(实际上,我知道的所有编程语言):例如,当您调用 print(1 + 1) 时,Python 将首先运行括号内的所有内容,然后仅将结果发送到 print 函数,所以print 只会看到 2,而没有关于如何计算 2 的信息。在您的情况下,Python 评估了hostname,并进行了如下调用:template.render({'testy': 'testy'}); Jinja 甚至没有机会看到原来的名字是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2020-02-21
    • 1970-01-01
    • 2018-03-11
    • 2020-12-24
    • 2019-04-15
    • 1970-01-01
    相关资源
    最近更新 更多