能否使用Flask框架渲染.ejs格式的模板文件?
Flask 渲染 EJS 文件的实现方法
可以实现。Flask 默认内置 Jinja2 模板引擎,但通过第三方依赖扩展,完全可以和 Node.js + Express 一样使用 EJS 作为模板渲染引擎,原有 Node 项目里的 EJS 语法也可以通用。
方案1:使用 flask-ejs 扩展(推荐,和Express用法最接近)
步骤1:安装依赖
执行以下pip命令安装扩展包:
pip install flask-ejs
步骤2:初始化应用并配置EJS引擎
在Flask启动文件中引入并初始化扩展,默认会读取项目根目录下templates文件夹内的EJS模板,和Express的默认模板目录规则一致:
from flask import Flask from flask_ejs import EjsExtension app = Flask(__name__) # 可自定义EJS模板存放目录,不配置默认使用templates文件夹 # app.config['EJS_TEMPLATES_DIR'] = 'your_custom_dir' ejs = EjsExtension(app)
步骤3:渲染EJS模板
和Express中res.render的用法基本一致,直接调用ejs.render方法传入模板名和变量即可:
- 先在
templates目录下新建index.ejs文件,语法和Node端EJS完全相同:
<h2>欢迎来到 <%= site_name %></h2> <% if (is_login) { %> <p>当前登录用户:<%= username %></p> <ul> <% for(let item of nav_list) { %> <li><a href="<%= item.url %>"><%= item.name %></a></li> <% } %> </ul> <% } else { %> <button>点击登录</button> <% } %>
- 编写路由调用渲染方法:
@app.route('/') def home(): return ejs.render('index.ejs', site_name = "Flask EJS 测试", is_login = True, username = "测试用户", nav_list = [ {"name": "首页", "url": "/"}, {"name": "设置", "url": "/settings"} ] )
方案2:手动封装渲染逻辑(无需Flask扩展)
如果不想引入额外的Flask扩展,也可以直接使用Python的EJS解析库自行封装渲染函数:
步骤1:安装依赖
pip install pyejs
步骤2:封装渲染函数
from flask import Flask, make_response from pyejs import EJS import os app = Flask(__name__) # 配置EJS模板存放目录 EJS_TEMPLATE_PATH = os.path.join(os.path.dirname(__file__), "templates") def render_ejs(template_name: str, **context) -> str: template_full_path = os.path.join(EJS_TEMPLATE_PATH, template_name) with open(template_full_path, "r", encoding="utf-8") as f: ejs_content = f.read() rendered_html = EJS(ejs_content).render(context) response = make_response(rendered_html) response.headers["Content-Type"] = "text/html; charset=utf-8" return response # 路由使用 @app.route('/') def home(): return render_ejs('index.ejs', name = "测试")
注意事项
- 两种方案都完全兼容Node端EJS的所有语法,包括变量输出、条件判断、循环、模板嵌套、include语法等,原有Node项目的EJS模板可以直接迁移使用
- 如果项目同时使用Jinja2和EJS,建议给两种模板设置不同的后缀名,避免模板加载冲突
- 生产环境使用建议提前缓存EJS模板内容,减少重复IO读取和解析的性能消耗
内容的提问来源于stack exchange,提问作者Sumit Tyagi
相关产品推荐
相关产品推荐

