我使用 Jinja2 编译模板和模块加载器从数据存储中加载编译模板(python 代码)。但是,当我的模板包含宏时,它不适用于应用引擎:TypeError: 'NoneType' object is not callable
但在应用引擎 SDK 中它工作正常。当我跳过宏调用时,我收到同样的错误。
没有宏它工作正常。在没有解决这个宏问题的情况下,我在模板中调用了一个 python 函数来实现宏的功能。
更新:这是导致错误的模板源代码:
{% extends "mainpage.html" %}
{% block form %}
{% macro test_macro(name) %}
<p>{{ name }}</p>
{% endmacro %}
<div>
{{ test_macro('John Doe') }}
</div>
{% endblock %}
这是编译后的模板代码(表单块部分):
def block_form(context, environment=environment):
if 0: yield None
yield u'\n'
def macro(l_name):
t_1 = []
pass
t_1.extend((
u'\n<p>',
to_string(l_name),
u'</p>\n',
))
return concat(t_1)
l_test_macro = Macro(environment, macro, 'test_macro', ('name',), (), False, False, False)
yield u'\n<div>\n\t%s\n</div>\n' % (
context.call(l_test_macro, 'John Doe'),
)
更新:经过一些调试它工作。不过我明白!!!问题:我失去了我的进口。当我在代码中重新定义我的导入时。有效。
模块顶部:
from __future__ import division
from jinja2.runtime import LoopContext, TemplateReference, Macro, Markup, TemplateRuntimeError, missing, concat, escape, markup_join, unicode_join, to_string, identity, TemplateNotFound
__jinja_template__ = None
为了使它工作,我必须添加一个内联导入:
from jinja2.runtime import Macro # import again ?????
l_test_macro = Macro(environment, macro, 'test_macro', ('name',), (), False, False, False)
有人可以解释一下,我怎么能失去我的进口???我只在应用程序引擎中遇到这个问题,而不是在 SDK 中???这是命名空间问题吗?