如何在jinja2中禁用过滤器结果的缓存

时间:2013-09-30 21:27:00

标签: python pyramid jinja2

我们正在开发一个Pyramid(通过pyramid_jinja2使用Jinja2模板)应用程序,该应用程序为用户提供了独特的子域名,以及稍后将此子域名更改为任何其他可用子域名的方法。

因此,例如,您可以转到sub.example.com/settings并将子域更改为“dub”。提交此更改后,您将被重定向到dub.example.com/settings。

我们在此设置中遇到一个问题 - 因为我们的子域存储在请求对象中,并且我们为每个基于子域的视图都有自定义预生成器 - 当我们在sub.example.com上调用route_url时 - 结果似乎是我们更改子域时缓存并生成相同的URL。所以例如在子域名更改之后(直到我们重新启动我们的应用程序)我们在dub.example.com地址的网站上,但是某些链接(菜单,某些形式的“action”目标)仍然是“sub.example.com”在网址中,因为此网址是在子网域更改之前生成的。

我在查找生成的网址被缓存的级别上有一个问题 - 总而言之 - 我不知道如何避免它。禁用url生成的缓存不是那么完美(虽然我甚至不知道它到现在为止是“一件事”)。

您认为解决此类问题的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

我花了一些时间来调试这个问题,但是为pyramid_jinja2创建了一个补丁。请参阅https://github.com/Pylons/pyramid_jinja2/pull/74

过滤器被评估为const,(函数as_const在jinja2的nodes.py中),导致过滤器只被执行一次。