2016-07-11 9 views
0

Я нашел эту ошибку при попытке запустить javascript в шаблоне хамелеона с каркасом пирамиды.Ошибка имени при использовании шаблона хамелеона в каркасе Pyramid

Это код, который извлекает данные из базы данных 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> 

страница ошибки появляется сообщение об ошибке, говоря Имя: Я

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> 

Спасибо за любую помощь. :)

ответ

0

Это ошибка Python. В шаблоне Chameleon testpage.pt вы используете синтаксис, который Chameleon (и, таким образом, Python) будет анализировать, как указано в ошибке.

Чтобы избежать проблемы, у вас есть как минимум два варианта.

  1. Переместить встроенный javascript во внешний файл, обслуживая его как статический актив и заменить встроенную ссылку на внешний файл.
  2. Исключите синтаксис JavaScript, чтобы Chameleon не анализировал его как Python.
+0

Спасибо за помощь .. На самом деле я решил этот. Я использовал шаблоны Jinja2, чтобы избавиться от этой проблемы. Существует циклическая структура (например, для цикла), с помощью которой вы можете напрямую обращаться к объектам python и перебирать их. [link] (http://jinja.pocoo.org/docs/dev/templates/) – Sreeram

+0

@Sreeram: Не то, чтобы у Chameleon не было способов перебора списка Python :) – Sergey

+0

Было бы полезно, если бы вы могли скажи мне, как я могу это сделать. Спасибо :) @Sergey – Sreeram

 Смежные вопросы

  • Нет связанных вопросов^_^