2013-11-17 2 views
0

Я звоню шаблон в следующем маршруте:python bottle - почему простой движок шаблонов превращает мой dict в список?

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 

ответ

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

Вы устанавливаете page = "". Итак, страница - это строка. Затем вы передаете page в header.tpl. Ну, это строка, и вы не можете индексировать строку с другой строкой.

Решение: используйте другое название для своей строки, чем для вашего dict.

0

Вы перезаписали исходный словарь под названием page с другой переменной, которая представляет собой строку, состоящую из результатов конкатенированного шаблона. Позвоните, что-то еще.

+0

О, д-р, спасибо. Я думал, что редактировал исходную переменную страницы, а не добавил новую. Я читал это несколько раз, не могу поверить, что я пропустил это. edit: Подождите, я этого не сделал, забыл, что я уже делал! – kryptobs2000