python - 如何强制重新执行 jinja2 模板中的函数?

标签 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 个参数的示例?

最佳答案

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

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

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

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

我的函数是这样的:

def AccessOK(xCurrentUser, PermissionID):

并且我在我的函数中忽略了 xCurrentUser 参数。

如果谁有更好的解决方案欢迎补充。

谢谢。

关于python - 如何强制重新执行 jinja2 模板中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12100997/

相关文章:

Ansible 条件忽略带有循环项的过滤器

使用字符串包含测试的 Jinja2 过滤器列表

python - 使用 NLTK 创建语料库时评估二元组不起作用

python - 映射单个函数比两次映射两个单独的函数慢?

python - 如何在 GitHub 源 (Python) 上向 Heroku 添加我不想要的 secret 文件

python - python 中需要一些正则表达式帮助

java - 是否为每个请求重复静态初始化?

google-app-engine - 在 GCP Cloud Run/Function 上使用固定的公共(public) IP(到白名单)

python - 使用 OAuth2 进行身份验证 + 与 google.appengine.api.users 服务兼容

python - 是否可以通过 url 传递非 ASCII 值?或者这里还有其他我没有看到的错误?