python bottle - 为什么简单的模板引擎将我的dict变成列表?

时间:2013-11-17 19:31:14

标签: python html templates bottle

我在以下路线中调用模板:

page = {"name": "welcome", "title": "Welcome", "icon": "/images/welcome-icon.png"}
contentOnly = request.query.get("contentOnly")
formRedirect = False
admin = is_admin()
announcments = get_announcments()
page = ""
if contentOnly:
  page += template("./views/welcome.tpl", contentOnly = contentOnly, announcments = announcments)
else:
  page += template("./views/header.tpl", page = page, admin = admin)
  page += template("./views/welcome.tpl", contentOnly = contentOnly, announcments = announcments)
  page += template("./views/footer.tpl", formRedirect = formRedirect)

当它在header.tpl:

中击中此行时
%if page['name'] == "welcome":

它会抛出以下错误:

File "/home/brett/projects/tastech website/development/views/header.tpl", line 5, in <module>
%if page['name'] == "welcome":
TypeError: string indices must be integers

3 个答案:

答案 0 :(得分:1)

在调用模板之前,将page设置为空字符串:

page = ""
# ...
else:
    page += template("./views/header.tpl", page = page, admin = admin)

因此,在模板中,page设置为"",即空字符串。

为字典使用不同的名称; page_data,或许:

page_data = {"name": "welcome", "title": "Welcome", "icon": "/images/welcome-icon.png"}
# ...
page = ""
# ...
else:
    page += template("./views/header.tpl", page=page_data, admin=admin)

答案 1 :(得分:1)

您设置了page = ""。所以页面是一个字符串。然后,您将page传递给header.tpl。好吧,它是一个字符串,你不能用另一个字符串索引到一个字符串。

解决方案:为字符串使用不同于dict的名称。

答案 2 :(得分:0)

您已使用另一个变量覆盖了名为page的原始字典,该变量是由连接的模板结果组成的字符串。称之为别的东西。