【问题标题】:Jinja2 post-process to append query string to all links?Jinja2 后处理将查询字符串附加到所有链接?
【发布时间】:2014-04-04 03:00:51
【问题描述】:

我想做的是渲染一个 jinja2 模板,但如果一个特定的环境变量为真(edit_mode),我想将 ?edit=1 添加到所有“a”标签的 href 中。

伪代码:

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 扩展对源代码进行后处理,但随后可能必须禁用缓存

这里还有更优雅的解决方案吗?

【问题讨论】:

    标签: python flask jinja2


    【解决方案1】:

    为什么不在路由级别添加它? “编辑”是否以不同的方式路由?类似于

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

    (或者如果可以接受的话,你也可以使用 JavaScript 轻松实现。)

    【讨论】:

    • 所以这实际上不起作用,因为edit_mode作为查询参数传入当前页面,然后在渲染时放入jinja2上下文。它不在应用配置中,因为它因用户而异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2023-03-26
    • 2013-01-09
    • 1970-01-01
    • 2020-01-28
    相关资源
    最近更新 更多