Jinja2 后处理为所有链接添加查询字符串?

0 投票
1 回答
588 浏览
提问于 2025-04-18 01:17

我想做的是渲染一个jinja2模板,但如果某个环境变量为真(edit_mode),我希望在所有“a”标签的链接后面加上 ?edit=1。

伪代码:

def render_template(tpl, ctx):
    if ctx['edit_mode']:
        return add_query_string_and_render(tpl, '?edit=1', **ctx)
    else:
        return tpl.render(**ctx)

我考虑过以下几种方法:

  • 用beautifulsoup解析渲染后的html,然后进行修改(虽然不太优雅,但能实现)
  • 在编译之前通过jinja2扩展对源代码进行后处理,但这样可能需要关闭缓存

这里有没有更优雅的解决方案呢?

1 个回答

0

你为什么不在路由层面上加这个呢?“编辑”是不是用不同的方式来处理的?可以像下面这样做:

@app.route('page/', defaults={'edit': app.config['edit_mode']})
# if edit do something here

(或者如果可以的话,你也可以用JavaScript很简单地做到这一点……)

撰写回答