2013-04-19 4 views
2

Как получить возвращаемое значение из% def?Что я могу сделать, чтобы получить возвращаемое значение из% def?

makoT1.py:

import mako 
from mako.template import Template 
from mako.lookup import TemplateLookup 
print "Hi world.", 
mytemplate = Template(filename='makoT1.mako') 
print mytemplate.render(), 

makoT1.mako

<% 
index = 0 
%> 
<%def name="a_def(counter)"> Pre: ${counter} <% counter += 1 %> Post: ${counter} <% return counter %> </%def> 
index: ${index} 
${a_def(index)} 
index: ${index} 

Dalem @ КНИ: ~ $ питон makoT1.py

Hi world. 

index: 0 
Pre: 0 Post: 1 1 
index: 0 

Обратите внимание, что второй "индекс" выше все еще 0? Вот что я пытаюсь исправить. Я бы хотел, чтобы он увеличивался.

Возможно, что-то подобное для makoT1.mako:

<% 
index = 0 
%> 
<%def name="a_def(counter)"> 
Pre: ${counter} 
<% counter += 1 %> 
Post: ${counter} 
<% return counter %> 
</%def> 
index: ${index} 
<% index = ${a_def(index)} %> 
index: ${index} 

Но что получает мне эту ошибку:

[email protected]:~$ python makoT1.py 
Hi world. 
Traceback (most recent call last): 
    File "makoT1.py", line 5, in <module> 
    mytemplate = Template(filename='makoT1.mako') 
    File "/usr/local/lib/python2.7/dist-packages/mako/template.py", line 291, in __init__ 
    module = self._compile_from_file(path, filename) 
    File "/usr/local/lib/python2.7/dist-packages/mako/template.py", line 368, in _compile_from_file 
    filename) 
    File "/usr/local/lib/python2.7/dist-packages/mako/template.py", line 615, in _compile_text 
    generate_magic_comment=template.disable_unicode) 
    File "/usr/local/lib/python2.7/dist-packages/mako/template.py", line 597, in _compile 
    node = lexer.parse() 
    File "/usr/local/lib/python2.7/dist-packages/mako/lexer.py", line 241, in parse 
    if self.match_python_block(): 
    File "/usr/local/lib/python2.7/dist-packages/mako/lexer.py", line 376, in match_python_block 
    match.group(1)=='!', lineno=line, pos=pos) 
    File "/usr/local/lib/python2.7/dist-packages/mako/lexer.py", line 131, in append_node 
    node = nodecls(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/mako/parsetree.py", line 139, in __init__ 
    self.code = ast.PythonCode(text, **self.exception_kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/mako/ast.py", line 37, in __init__ 
    expr = pyparser.parse(code.lstrip(), "exec", **exception_kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/mako/pyparser.py", line 60, in parse 
    ), **exception_kwargs) 
mako.exceptions.SyntaxException: (SyntaxError) invalid syntax (<unknown>, line 1) (u'index = ${a_def(index)} \n') in file 'makoT1.mako' at line: 11 char: 1 

Это кажется странным, что линия 11 получит SyntaxError, когда это работает отлично для линии 11:

<% index = 0 %> 

в случае, если не $ {a_def (индекс)} возвращает целое число от a_def (счетчик)?

ответ

1

Использование

<% index = a_def(index) %> 

не используют

<% index = ${a_def(index)} %> 

или

<% index = ${capture(a_def(index))} %>