2014-02-10 8 views
2

Heres моя проблема:Как использовать функцию печати с Мако шаблонами

я определить функцию с именем «Lorem», который должен напечатать текст:

<div id="mainpage"> 
     <% 
     def lorem(): 
      for i in range(0,50): 
       print("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam") 
     %> 
     ${lorem()} 
    </div> 

Но все это делает печать этого текста на моя консоль, но я хочу, чтобы это было напечатано на моем сайте. Я использую cherrypy и Mako с python 3.3.

ответ

2

Вы должны использовать def mako tag, что облегчает жизнь.

<%def name="lorem()"> 
% for i in range(0,50): 
    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam 
% endfor 
</%def> 
<div id="mainpage"> 
    ${lorem()} 
</div> 

Edit: если вы хотите использовать стандартную функцию питона, как у вас есть, вы просто должны убедиться, что она возвращает что-то (печать отправляет вывод на стандартный вывод, а не к вашему мако шаблона).

<div id="mainpage"> 
    <% 
    def lorem(): 
     res = [] 
     for i in range(0,50): 
      res.append("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam") 
     return ' '.join(res) 
    %> 
    ${lorem()} 
</div> 

или список использование постижение

return ' '.join([ 
    "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam" 
    for i in range(0,50) 
] 
+0

спасибо, это решило мою проблему :) – knusperwurst

0

Похоже, вы просто ввести текст, который вы хотите без команды печати ...

<div id="mainpage"> 
    <% 
    def lorem(): 
     for i in range(0,50): 
      return "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam" 
    %> 
    ${lorem()} 
</div> 

http://docs.makotemplates.org/en/latest/defs.html#using-defs

Надеется, что это помогает!

+0

Спасибо за ваш ответ, я уже пробовал это, но это не сработало – knusperwurst

0

Вы можете печатать на context объекта:

<% 
def lorem(): 
    for i in range(0,50): 
     print("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam", file=context) 
%> 
${lorem()}