2013-05-19 2 views
2

Я использую CherryPy с шаблонами Мако. Я пытаюсь выяснить, как передать aruguments от первоначального вызова (в данном примере title):Передать переменную из шаблона Мако в унаследованный шаблон

class Landing(object): 
    def index(self): 
     tmpl = lookup.get_template("index.html") 
     return tmpl.render(title="Hello World") 
    index.exposed = True 

к index.html:

<%inherit file="base.html"/> 
<%def name="title()">$(title)</%def> 
this is the body content 

, а затем к унаследованной base.html шаблона:

<!DOCTYPE html> 
    <head> 
     <meta charset="utf-8"> 
     <title>$(self.title())</title> 
    </head> 
    <body> 
     <h1>$(parent.title())</h1> 
     ${self.body()} 
    </body> 
</html> 

Я пробовал self.title и parent.title и не работал. Как передать переменную из начального вызова?

+1

$ {TITLE} должны работать. Поэтому используйте фигурные скобки вместо обычных. И это не вызов функции, поэтому удалите() в конце. –

+0

Возможно, вы также захотите изменить имя = "title()" на name = "$ {title}" –

+0

@basvandenberg спасибо, вот и все! Если вы добавите его в качестве ответа, я соглашусь с ним. Я попытался заменить title() на $ {title}, но получил ошибку: 'mako.exceptions.CompileException: Attibute 'name' в теге 'def' не разрешает встроенные выражения в файле 'template/index.html' в строке: 2 char: 1 – xylar

ответ

0

Для того, чтобы использовать визуализированная переменные - использовать их с ${ title } не $(title)