【问题标题】:Name error while using chameleon templating in Pyramid framework在 Pyramid 框架中使用变色龙模板时出现名称错误
【发布时间】:2016-11-13 16:03:12
【问题描述】:

我在尝试使用金字塔框架在变色龙模板中运行 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>

错误页面显示名称错误: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>

感谢您的帮助。 :)

【问题讨论】:

    标签: javascript templates pyramid nameerror chameleon


    【解决方案1】:

    这是一个 Python 错误。在 Chameleon 模板 testpage.pt 中,您使用 Chameleon(以及 Python)将按照错误提示解析的语法。

    为避免此问题,您至少有两种选择。

    1. 将内联 javascript 移至外部文件,将其作为静态资产提供,并将内联替换为对外部文件的引用。
    2. 转义 JavaScript 语法,以便 Chameleon 不会将其解析为 Python。

    【讨论】:

    • 感谢您的帮助.. 实际上我解决了这个问题。我使用 Jinja2 模板来解决这个问题。有一个循环结构(如 for 循环),您可以通过它直接访问 python 对象并对其进行迭代。 link
    • @Sreeram:并不是说 Chameleon 没有任何方法可以遍历 Python 列表 :)
    • 如果您能告诉我如何做到这一点,将会很有帮助。谢谢 :) @Sergey
    • @Sreeram: tal:repeat 是你的朋友:chameleon.readthedocs.io/en/latest/#introduction
    猜你喜欢
    • 2012-02-15
    • 2011-10-01
    • 2017-11-09
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多