__future__导入使用我从Mako的模板
<%!
from __future__ import division
%>
在我的模板文件的最顶端。我得到的错误:
SyntaxError: from __future__ imports must occur at the beginning of the file
什么是正确的方法来做到这一点?
__future__导入使用我从Mako的模板
<%!
from __future__ import division
%>
在我的模板文件的最顶端。我得到的错误:
SyntaxError: from __future__ imports must occur at the beginning of the file
什么是正确的方法来做到这一点?
您不能在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
永远不会放在第一位。
你仍然可以使用浮点除以铸造/
除法运算的一个操作数为float:
>>> 1/2
0
>>> float(1)/2
0.5
只要你遵循的解决方法,你可以做精而不division
未来进口。
从__future__
导入将是整洁,但我想不出如何使其工作(也许有人谁更熟悉Mako的内部可以)。 Martijn解释了为什么它不可能。但我可以提出一些解决方法。
如果可能,请在模板之外进行划分,并将结果放入上下文中。这与我个人的偏好保持一致,尽可能多地保留模板。
如果这不是一个选项有hacky解决方案,将您的操作数转换为浮点数。如果你需要做的这个部门在很多不同的地方,你可以在模块级块添加一个功能:
<%!
def div(a, b):
return float(a)/float(b)
%>
绝对比你脑子里想的是什么不太优雅,但它会工作。
我的绝大多数逻辑都在视图中,但这种情况是在显示每个数据行之前进行的一些处理,所以我认为我会保持代码接近它的使用。我总是可以编写一个辅助函数并导入它,但这确实会很整齐。 – Hollister
是的,我从调试中看到了这一点(并且错误在第17行),但是Mike Bayer(techspot.zzzeek.org)非常聪明,我认为他有一个适应的空间。另外,'division'不是唯一的未来进口(想到“带'')。在我尝试这个之前,我正在使用'float()'。 – Hollister
你不得不放入一个功能请求,将'from __future__ with'语句移动到模板的python输出的顶部。但是由于这种进口可能会改变模板脚手架本身的意义,我不确定这是否是一个好主意,并且被迈克拜耳或其他Mako维护人员所接受。 –