我有
<%!
from __future__ import division
%>
位于我的模板文件的最顶层。我收到错误:
SyntaxError: from __future__ imports must occur at the beginning of the file
这样做的正确方法是什么?
答案 0 :(得分:4)
您不能在Mako模板中使用from __future__ import
语句。完全没有。
这是因为Mako模板被编译为python文件,为了使其工作,它在该python文件的顶部设置了一些初始结构:
# -*- encoding:ascii -*-
from mako import runtime, filters, cache
UNDEFINED = runtime.UNDEFINED
__M_dict_builtin = dict
__M_locals_builtin = locals
_magic_number = 7
_modified_time = 1348257499.1626351
_template_filename = '/tmp/mako.txt'
_template_uri = '/tmp/mako.txt'
_source_encoding = 'ascii'
_exports = []
> 此初始设置后,只有包含模板本身的任何代码。您的from __future__ import division
永远不会放在首位。
您仍然可以通过将/
除法运算符的操作数转换为浮点数来使用浮点除法:
>>> 1 / 2
0
>>> float(1) / 2
0.5
只要您遵循该解决方法,您就可以在没有division
将来导入的情况下正常工作。
答案 1 :(得分:0)
从__future__
导入将是整洁的,但我想不出如何使其工作(也许是那些更熟悉Mako的内部人员的人)。 Martijn解释了为什么不可能。我可以建议一些工作。
如果可能,在模板之外进行除法,并将结果放在Context中。这符合我个人的偏好,以尽可能多地保留模板的逻辑。
如果这不是一个选项,那就是hacky解决方案,将操作数转换为浮点数。如果你需要在一堆不同的地方进行这种划分,你可以在模块级块中添加一个函数:
<%!
def div(a, b):
return float(a) / float(b)
%>
绝对不如你想象的那么优雅,但它会起作用。