2016-07-11 14 views
0

Ich fand diesen Fehler beim Versuch, JavaScript in Chamäleon Vorlage mit Pyramidenrahmen zu laufen.Name Fehler bei der Verwendung Chamäleon Templating in Pyramid Framework

Dies ist der Code, der Daten aus der SQLite-Datenbank abruft.

@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} 

Das Chamäleon testpage.pt Vorlagendatei wie dies geht,

<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> 

Fehler Seite zeigt sagen Namens Fehler auf: 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> 

Vielen Dank für jede Hilfe. :)

Antwort

0

Das ist ein Python-Fehler. In der Chameleon-Vorlage testpage.pt verwenden Sie die Syntax, die Chameleon (und so Python) analysiert, wie vom Fehler bemerkt.

Um das Problem zu vermeiden, haben Sie mindestens zwei Optionen.

  1. Verschieben Sie das Javascript in eine externe Datei, die als statisches Asset dient, und ersetzen Sie das Inline-Element durch einen Verweis auf die externe Datei.
  2. Entkomme der JavaScript-Syntax, damit Chameleon sie nicht als Python analysiert.
+0

Danke für Ihre Hilfe .. Eigentlich habe ich diese gelöst. Ich benutzte Jinja2 Templating, um von diesem Problem wegzukommen. Es gibt eine Schleifenstruktur (wie for-Schleife), mit der Sie direkt auf Python-Objekte zugreifen und sie iterieren können. [link] (http://jinja.pocoo.org/docs/dev/templates/) – Sreeram

+0

@Sreeram: Nicht, dass Chameleon keine Möglichkeit hatte, über eine Python-Liste zu iterieren :) – Sergey

+0

Es wäre hilfreich, wenn du könntest Sag mir, wie ich das machen kann. Danke :) @Sergey – Sreeram