增加 addSharedFunction增加共享模板,并做测试
This commit is contained in:
@@ -110,6 +110,41 @@ class Enjoy:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise RuntimeError(f"调用失败: {e}") from e
|
raise RuntimeError(f"调用失败: {e}") from e
|
||||||
|
|
||||||
|
def addSharedFunction(self, layouts: [str]):
|
||||||
|
"""添加全局共享函数"""
|
||||||
|
for layout in layouts:
|
||||||
|
self._engine.addSharedFunction(layout)
|
||||||
|
|
||||||
|
def invoke_engine_method(self, method_name: str, *args, **kwargs) -> Any:
|
||||||
|
"""
|
||||||
|
通用方法:调用内部_engine的其他可调用方法
|
||||||
|
|
||||||
|
:param method_name: 要调用的_engine方法名
|
||||||
|
:param args: 位置参数
|
||||||
|
:param kwargs: 关键字参数
|
||||||
|
:return: 方法调用结果
|
||||||
|
:raises RuntimeError: 如果Engine未初始化或方法调用失败
|
||||||
|
"""
|
||||||
|
if not self._engine:
|
||||||
|
raise RuntimeError("Engine未初始化,请检查Jar包路径")
|
||||||
|
|
||||||
|
try:
|
||||||
|
# 获取_engine的方法
|
||||||
|
method = getattr(self._engine, method_name)
|
||||||
|
# 转换Python参数为Java兼容类型
|
||||||
|
converted_args = [self._convert_python_to_java(arg) for arg in args]
|
||||||
|
converted_kwargs = {k: self._convert_python_to_java(v) for k, v in kwargs.items()}
|
||||||
|
# 调用方法并返回结果
|
||||||
|
return method(*converted_args, **converted_kwargs)
|
||||||
|
except AttributeError:
|
||||||
|
raise RuntimeError(f"Engine对象没有方法: {method_name}") from None
|
||||||
|
except jpype.JException as e:
|
||||||
|
print(f"\n=== JFinal Enjoy {method_name} 方法调用异常详情 ===")
|
||||||
|
e.printStackTrace()
|
||||||
|
raise RuntimeError(f"{method_name}方法调用失败: {e.getMessage()}") from e
|
||||||
|
except Exception as e:
|
||||||
|
raise RuntimeError(f"{method_name}方法调用失败: {e}") from e
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
"""关闭JVM,释放资源"""
|
"""关闭JVM,释放资源"""
|
||||||
if self._jvm_started:
|
if self._jvm_started:
|
||||||
@@ -136,6 +171,7 @@ if __name__ == "__main__":
|
|||||||
template_base_path=TEMPLATE_BASE_PATH
|
template_base_path=TEMPLATE_BASE_PATH
|
||||||
)
|
)
|
||||||
|
|
||||||
|
enjoy.addSharedFunction(['layout.html'])
|
||||||
# 3. 准备模板参数
|
# 3. 准备模板参数
|
||||||
render_data = {
|
render_data = {
|
||||||
"name": "JFinal Enjoy 5.2.2测试",
|
"name": "JFinal Enjoy 5.2.2测试",
|
||||||
@@ -145,7 +181,7 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
# 4. 渲染模板(tempStr是模板文件名,相对于TEMPLATE_BASE_PATH)
|
# 4. 渲染模板(tempStr是模板文件名,相对于TEMPLATE_BASE_PATH)
|
||||||
result = enjoy.render(
|
result = enjoy.render(
|
||||||
tempStr="index.html", # 模板文件:./templates/index.html
|
tempStr="layout-test.html", # 模板文件:./templates/index.html
|
||||||
data=render_data # 渲染数据(Python字典)
|
data=render_data # 渲染数据(Python字典)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
32
enjoy/templates/layout-test.html
Normal file
32
enjoy/templates/layout-test.html
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#@layout()
|
||||||
|
### 调用 layout.html 中定义的模板函数 layout()
|
||||||
|
|
||||||
|
#define main()
|
||||||
|
<div>
|
||||||
|
这里是模板内容部分,相当于传统模板引擎的 nested 的部分
|
||||||
|
#(name)
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
#for(i : hobbies)
|
||||||
|
#(i)
|
||||||
|
#end
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
#for(i : scores)
|
||||||
|
#(i)
|
||||||
|
#end
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
#for(i : user)
|
||||||
|
#(i.key) #(i.value)
|
||||||
|
#end
|
||||||
|
</div>
|
||||||
|
#end
|
||||||
|
|
||||||
|
#define css()
|
||||||
|
这里可以引入额外的 css 内容
|
||||||
|
#end
|
||||||
|
|
||||||
|
#define js()
|
||||||
|
这里可以引入额外的 js 内容
|
||||||
|
#end
|
||||||
17
enjoy/templates/layout.html
Normal file
17
enjoy/templates/layout.html
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#define layout()
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/assets/css/jfinal.css">
|
||||||
|
#@css?()
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
#@main()
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="/assets/js/jfinal.js"></script>
|
||||||
|
#@js?()
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
#end
|
||||||
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "py-enjoy"
|
name = "py-enjoy"
|
||||||
version = "0.1.2"
|
version = "0.1.3"
|
||||||
authors = [
|
authors = [
|
||||||
{ name = "mrzhou", email = "mrzhou@miw.cn" }
|
{ name = "mrzhou", email = "mrzhou@miw.cn" }
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user