0

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

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

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

我在查找生成的 url 被缓存到什么级别时遇到问题,总而言之 - 我不知道如何避免它。禁用 url 生成的缓存并不那么完美(尽管直到现在我什至不知道它是“一件事”)。

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

4

1 回答 1

1

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

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

于 2013-11-07T14:49:14.390 回答