如何强制在jinja2模板中重新执行某个函数?

时间:2012-08-23 22:40:30

标签: python google-app-engine jinja2

我是GAE / Python的新手。

我有一个调用客户过滤功能的jinja2模板:

电话会议如下:

{% if constant-parameter|AccessOK %} 
    <li><a href="/tokens-step1">Tokens</a></li>
{% endif %} 

我在页面上定义了调用渲染模板的过滤器:

TEMPLATE_DIR = os.path.join(os.path.dirname(__file__), 'templates')
jinja_environment = \
    jinja2.Environment(autoescape=True, loader=jinja2.FileSystemLoader(TEMPLATE_DIR))
jinja_environment.filters['AccessOK'] = AccessOK

当我运行它时,在启动应用程序引擎后第一次访问网站时调用过滤器(我有记录条目)。

当我访问其他页面或刷新页面时,永远不会再次调用过滤器。

我需要在每个页面视图上执行过滤器。

我被告知这是因为参数是常量,如果我将其更改为变量,它将每次执行。在我的情况下,我需要传递常量,所以我尝试传递2个参数(其中变量= currentuser并且仅存在以欺骗系统每次执行过滤器。)

我收到错误消息,表明系统无法识别第二个参数。

有人能告诉我如何确保每次都调用客户过滤器,或者举例说明如何传递2个参数?

1 个答案:

答案 0 :(得分:0)

这可能不是最优雅的解决方案,但它确实有效。

我添加了一个更改变量作为附加参数(在本例中为currentuser)。这意味着我必须传递2个参数。

我的模板语句现在看起来像:

{% if currentuser|AccessOK(constant-parameter) %} 
    <li><a href="/tokens-step1">Tokens</a></li>
{% endif %} 

我的功能看起来像这样:

def AccessOK(xCurrentUser, PermissionID):

我忽略了函数中的xCurrentUser参数。

如果有人有更好的解决方案,请添加它。

感谢。