【问题标题】:Is there a way to change the Jinja2 template loading directory per-request?有没有办法根据请求更改 Jinja2 模板加载目录?
【发布时间】:2011-06-22 17:48:04
【问题描述】:

有没有办法在 Flask 上根据请求更改 Jinja2 根目录?现在我做:

app.jinja_loader = FileSystemLoader(template_directory)

但它似乎每个进程只工作一次(进程首先选择正确的目录然后停留在那里,无论我做了多少更改)...

【问题讨论】:

  • 经过一番调查,看起来 Jinja 将模板缓存在内存中,但我不知道它在哪里。如果我将源代码中的 uptodate 函数更改为始终返回 False,它始终会重新加载模板并正常工作。
  • 将 cache_size 设置为 0 不起作用,但是...
  • 在 jinja 源代码中将 cache_size 设置为 0 有效,但是从 Flask 设置选项时我无法让它工作,我一定是做错了。

标签: python google-app-engine flask jinja2


【解决方案1】:

事实证明,Jinja 缓存错误导致无法加载正确的模板,因此禁用缓存有效:

app.jinja_env.cache = None

【讨论】:

    【解决方案2】:

    你可以试试这个:

    app._get_current_object().jinja_loader = FileSystemLoader(template_directory)
    

    文档http://flask.pocoo.org/docs/api/#notes-on-proxieshttp://werkzeug.pocoo.org/docs/local/#werkzeug.local.LocalProxy._get_current_object

    【讨论】:

    • 那不行,它说app对象没有那个属性,这很奇怪。不过,我想我知道为什么会这样,我会在上面发表评论。
    猜你喜欢
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 2015-03-14
    • 2012-03-27
    • 2010-11-20
    相关资源
    最近更新 更多