Как использовать функцию печати с шаблонами Mako

вот моя проблема:

я определяю функцию с именем "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.


person knusperwurst    schedule 10.02.2014    source источник


Ответы (3)


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

<%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>

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

<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)
]
person Pykler    schedule 10.02.2014

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

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

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

<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

Надеюсь это поможет!

person Andrew Kloos    schedule 10.02.2014
comment
Спасибо за ответ, я уже пробовал это, но это не сработало - person knusperwurst; 10.02.2014