【问题标题】:How do I force re-execution of a function in a jinja2 template?如何强制重新执行 jinja2 模板中的函数?
【发布时间】:2012-08-23 22:40:30
【问题描述】:

我是一名 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 个参数?

【问题讨论】:

    标签: python google-app-engine jinja2


    【解决方案1】:

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

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

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

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

    我的函数如下所示:

    def AccessOK(xCurrentUser, PermissionID):
    

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

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

    谢谢。

    【讨论】:

      猜你喜欢
      • 2011-05-11
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多