Как использовать шаблон mako для разделения?

Предполагая, что у меня есть две переменные «один» и «два», где они равны 1 и 2 соответственно. Как я могу разделить их в шаблоне мако, если это возможно? Я хочу что-то вроде:

${"{0:.2f}".format(one/two)}

Результат, который я хочу вывести в шаблоне: 0,50

Я использую питон 2.x.


person Rolando    schedule 20.08.2013    source источник
comment
Попробуйте: ${"{0:.2f}".format(one//two)}   -  person Grijesh Chauhan    schedule 21.08.2013
comment
@GrjeshChauhan, который вызовет целочисленное деление как в 2.x, так и в 3.x ... так что в этом случае не поможет;)   -  person Jon Clements♦    schedule 21.08.2013
comment
Он появляется меньше 0 после того, как результат отображается как 0. Есть ли способ заставить его не выполнять целочисленное деление и использовать десятичные дроби?   -  person Rolando    schedule 21.08.2013
comment
@JonClements мы можем использовать ${"{0:.2f}".format(float(one)/two)}? как мы используем в C   -  person Grijesh Chauhan    schedule 21.08.2013
comment
@GrjeshChauhan да - или operator.truediv(one, two) - но у Алекса здесь правильный подход   -  person Jon Clements♦    schedule 21.08.2013


Ответы (1)


Вам нужно добавить division к future_imports аргументу Template:

>>> from mako.template import Template
>>> print Template("${a/b}").render(a=1, b=2)
0
>>> print Template("${a/b}", future_imports=['division']).render(a=1, b=2)
0.5
>>> print Template("${'{0:.2f}'.format(a/b)}", future_imports=["division"]).render(a=1, b=2)
0.50

Цитата из документов:

future_imports — Строковый список имен для импорта из __future__. Они будут объединены в строку, разделенную запятыми, и вставлены в начало шаблона, например. futures_imports=['FOO', 'BAR'] приводит к from __future__ import FOO, BAR. Если вы заинтересованы в использовании таких функций, как новый оператор деления, вы должны использовать future_imports, чтобы передать это средству визуализации, так как в противном случае импорт не будет отображаться как первый выполняемый оператор в сгенерированном коде и, следовательно, не будет иметь желаемого эффекта.

person alecxe    schedule 20.08.2013
comment
TypeError: __init__() получил неожиданный ключевой аргумент «future_imports»? - person Rolando; 21.08.2013
comment
Хороший материал для меня! Я добавил эту страницу в закладки, так как сейчас она немного сложна для меня. - person Grijesh Chauhan; 21.08.2013
comment
@ Роландо mako.__version__? :) - person alecxe; 21.08.2013
comment
@Rolando, пожалуйста, обновитесь до последней версии. future_imports был представлен в 0.8.0: makotemplates.org/CHANGES. - person alecxe; 21.08.2013