在 Pyramid 框架中使用变色龙模板时出现名称错误
Name error while using chameleon templating in Pyramid framework
我在使用金字塔框架的变色龙模板中尝试 运行 javascript 时发现了这个错误。
这是从 sqlite 数据库中获取数据的代码。
@view_config(route_name='ddo2', renderer='../templates/pages/testpage.pt')
def ddo2(request):
query = request.dbsession.query(UserRoles)
allusers = query.filter(UserRoles.role_id == 1).all()
length = len(allusers)
return {'all_users':allusers,'length':length}
变色龙模板文件testpage.pt是这样的,
<html>
<body>
<script type="text/javascript">
function createMany(nums){
var str = "";
for(i=0;i<nums;i++){
str += "<input type='radio' name='value1' />${all_users[i].id} <br>";
}
document.getElementById("divTxt").innerHTML = str;
}
</script>
<p>
<input type="button" name="button" id="button" value="To view user details click this" onclick="createMany(${length});" />
</p>
<div id="divTxt"></div>
</body>
</html>
错误页面显示名称 error:i
NameError: i
- Expression: "${all_users[i].id} "
- Filename: c:\nic\pro\scripts\nic\nic\templates\pages\testpage.pt
- Location: (line 11: col 57)
- Source: ... adio' name='value1' />${all_users[i].id} <br>";
^^^^^^^^^^^^^^^^^^^^
- Arguments: repeat: {...} (0)
renderer_name: ../templates/pages/testpage.pt
req: <Request - at 0x560e940L>
request: <Request - at 0x560e940L>
renderer_info: <RendererHelper - at 0x56b53c8L>
length: 2
context: <instance None at 0x56a9988L>
all_users: <list - at 0x56a9e88L>
view: <function ddo2 at 0x55d54a8L>
感谢您的帮助。 :)
这是一个 Python 错误。在 Chameleon 模板 testpage.pt
中,您使用 Chameleon(因此 Python)将解析的语法,如错误所述。
要避免此问题,您至少有两个选择。
- 将内联 javascript 移动到外部文件,将其作为静态资产提供,并将内联替换为对外部文件的引用。
- 转义 JavaScript 语法,这样 Chameleon 就不会将其解析为 Python。
我在使用金字塔框架的变色龙模板中尝试 运行 javascript 时发现了这个错误。
这是从 sqlite 数据库中获取数据的代码。
@view_config(route_name='ddo2', renderer='../templates/pages/testpage.pt')
def ddo2(request):
query = request.dbsession.query(UserRoles)
allusers = query.filter(UserRoles.role_id == 1).all()
length = len(allusers)
return {'all_users':allusers,'length':length}
变色龙模板文件testpage.pt是这样的,
<html>
<body>
<script type="text/javascript">
function createMany(nums){
var str = "";
for(i=0;i<nums;i++){
str += "<input type='radio' name='value1' />${all_users[i].id} <br>";
}
document.getElementById("divTxt").innerHTML = str;
}
</script>
<p>
<input type="button" name="button" id="button" value="To view user details click this" onclick="createMany(${length});" />
</p>
<div id="divTxt"></div>
</body>
</html>
错误页面显示名称 error:i
NameError: i
- Expression: "${all_users[i].id} "
- Filename: c:\nic\pro\scripts\nic\nic\templates\pages\testpage.pt
- Location: (line 11: col 57)
- Source: ... adio' name='value1' />${all_users[i].id} <br>";
^^^^^^^^^^^^^^^^^^^^
- Arguments: repeat: {...} (0)
renderer_name: ../templates/pages/testpage.pt
req: <Request - at 0x560e940L>
request: <Request - at 0x560e940L>
renderer_info: <RendererHelper - at 0x56b53c8L>
length: 2
context: <instance None at 0x56a9988L>
all_users: <list - at 0x56a9e88L>
view: <function ddo2 at 0x55d54a8L>
感谢您的帮助。 :)
这是一个 Python 错误。在 Chameleon 模板 testpage.pt
中,您使用 Chameleon(因此 Python)将解析的语法,如错误所述。
要避免此问题,您至少有两个选择。
- 将内联 javascript 移动到外部文件,将其作为静态资产提供,并将内联替换为对外部文件的引用。
- 转义 JavaScript 语法,这样 Chameleon 就不会将其解析为 Python。