从马可模板__future__导入使用(Using from __future__ import i

2019-09-22 18:30发布

我有

<%!
    from __future__ import division
%>

在我的模板文件的最顶端。 我得到的错误:

SyntaxError: from __future__ imports must occur at the beginning of the file 

什么是这样做的正确方法?

Answer 1:

您不能使用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今后进口。



Answer 2:

从导入__future__将是整洁,但我想不出如何使它工作 (也许有人谁更熟悉的马可的内部即可) 。 马亭解释了为什么它是不可能的。 我可以建议一对夫妇的工作,虽然各地。

如果可能的话,做到分工模板之外,并把结果语境。 这会将我的个人喜好,以保持尽可能多的逻辑从模板尽可能的。

如果这不是一个选项,还有的哈克解决方案,将您的操作数浮动。 如果你需要做的这个部门在很多不同的地方,你可以在模块级块添加一个功能:

<%!
    def div(a, b):
        return float(a) / float(b)
%>

绝对比你脑子里想的是什么,但它会工作那么优雅。



文章来源: Using from __future__ import in Mako template
标签: python mako