Как да използвам мако шаблон за разделяне?

Ако приемем, че имам две променливи "едно" и "две", където те са равни съответно на 1 и 2. Как мога да ги разделя в мако шаблон, ако е възможно? Искам нещо като:

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

Резултатът, който искам да изведа в шаблона, е: 0,50

Използвам python 2.x.


person Rolando    schedule 20.08.2013    source източник
comment
Опитайте: ${"{0:.2f}".format(one//two)}   -  person Grijesh Chauhan    schedule 21.08.2013
comment
@GrijeshChauhan, което би принудило целочислено деление както в 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
@GrijeshChauhan да - или 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

Цитат от docs:

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