Flask应用如何在Jinja模板中根据运行环境动态切换iframe的src地址
实现方案
1. 后端配置(优先推荐该方案,逻辑统一放在后端维护)
首先在Flask启动文件中通过模板上下文注入预处理好的iframe地址,无需在模板中写判断逻辑:
import os from flask import Flask, render_template app = Flask(__name__) # 全局注入dashboard地址,所有模板都可直接调用 @app.context_processor def inject_config(): # 判断当前环境,生产环境会提前设置FLASK_ENV=production的环境变量 if os.getenv("FLASK_ENV") == "production": dashboard_url = "http://server-name.elasticbeanstalk.com/dashboard2" else: dashboard_url = "http://localhost:8000/dashboard2/" return {"dashboard_url": dashboard_url} # 你的路由示例 @app.route("/dashboard") def dashboard(): return render_template("dashboard.html")
2. 修改Jinja模板代码
直接引用后端注入的地址变量即可:
{% extends "base.html" %} {% block content %} <div class="embed-responsive embed-responsive-16by9"> <iframe loading="lazy" class="embed-responsive-item" src="{{ dashboard_url }}" width="100%" height="600"></iframe> </div> {% endblock %}
可选方案:直接在模板中判断环境
如果需要把逻辑放在模板里实现,先在后端把os模块注入模板上下文:
@app.context_processor def inject_os_module(): import os return {"os": os}
再修改模板代码,直接在模板内做判断:
{% extends "base.html" %} {% block content %} {% set dashboard_url = "http://server-name.elasticbeanstalk.com/dashboard2" if os.getenv("FLASK_ENV") == "production" else "http://localhost:8000/dashboard2/" %} <div class="embed-responsive embed-responsive-16by9"> <iframe loading="lazy" class="embed-responsive-item" src="{{ dashboard_url }}" width="100%" height="600"></iframe> </div> {% endblock %}
生产环境配置
在AWS Elastic Beanstalk控制台进入对应应用的「配置」-「软件」-「环境属性」,添加键为FLASK_ENV、值为production的环境变量即可。
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

