增加 addSharedFunction增加共享模板,并做测试
This commit is contained in:
@@ -110,6 +110,41 @@ class Enjoy:
|
||||
except Exception as 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):
|
||||
"""关闭JVM,释放资源"""
|
||||
if self._jvm_started:
|
||||
@@ -136,6 +171,7 @@ if __name__ == "__main__":
|
||||
template_base_path=TEMPLATE_BASE_PATH
|
||||
)
|
||||
|
||||
enjoy.addSharedFunction(['layout.html'])
|
||||
# 3. 准备模板参数
|
||||
render_data = {
|
||||
"name": "JFinal Enjoy 5.2.2测试",
|
||||
@@ -145,7 +181,7 @@ if __name__ == "__main__":
|
||||
|
||||
# 4. 渲染模板(tempStr是模板文件名,相对于TEMPLATE_BASE_PATH)
|
||||
result = enjoy.render(
|
||||
tempStr="index.html", # 模板文件:./templates/index.html
|
||||
tempStr="layout-test.html", # 模板文件:./templates/index.html
|
||||
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]
|
||||
name = "py-enjoy"
|
||||
version = "0.1.2"
|
||||
version = "0.1.3"
|
||||
authors = [
|
||||
{ name = "mrzhou", email = "mrzhou@miw.cn" }
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user