2016-03-31 22 views
0

Ben python gelişimi için cherrypy framework öğreniyorum.Ben bir veri tabanı oluşturdum, bazı veriler ekledim ve şimdi tarayıcımda göstermek istiyorum.Data sqlite veritabanında oluşturulduğunda ancak verileri gösterdiğinde Verileri tarayıcıda yazdırmak yerine döngü. Kirazlı çerçeve içinde html dosyası içinde python kodu nasıl kullanılır?

import sqlite3 
import cherrypy 

class simple_db(object): 
    @cherrypy.expose 
    def index(self): 
     db = sqlite3.connect('picnic.db') 
     c = db.cursor() 
     c.execute("SELECT item,quant FROM picnic") 
     data = c.fetchone() 
     c.close() 
     output = open("data.html") 
     return output 


if __name__ == '__main__': 

    cherrypy.config.update("app.conf") 
    cherrypy.quickstart(simple_db()) 

Benim html dosyası

,

<h1>Things to bring to our picnic</h1> 
    <head> 
    <style> 
    table { 
     border-collapse: collapse; 
    } 
    </style> 
    </head> 
    <table border=1> 
    <tr><th>Item</th><th>Quantity</th></tr> 
    % for row in data: 
     <tr> 
     % for col in row: 
      <td>{{col}}</td> 
     % endfor 
     </tr> 
    % endfor 

cevap

2

HTML'nizde aslında hale gereken bir şablon (eğer Mako kullandığınız gibi görünüyor) 'dir.

Şu anda kodunuz sadece şablon dosyasını açıp dosya nesnesini döndürüyor. Bu, vişnenin bu dosyanın içeriğini iade etmesine neden olur. Yüklediğiniz varsayarsak

şablon böyledir işlemek için basit yolu mako: c.fetchall() yerine fetchone() arasında kullanılması gerektiğini

import sqlite3 
import cherrypy 
from mako.template import Template 

class simple_db(object): 
    @cherrypy.expose 
    def index(self): 
     db = sqlite3.connect('picnic.db') 
     c = db.cursor() 
     c.execute("SELECT item,quant FROM picnic") 
     data = c.fetchall() 
     c.close() 
     return Template(filename='data.html').render(data=data) 

if __name__ == '__main__': 
    cherrypy.config.update("app.conf") 
    cherrypy.quickstart(simple_db()) 

Not.

Ayrıca, şablonda col'un doğru başvurulmadığı bir hata oluştu. Bu

 <td>${col}</td> 

değil

 <td>{{col}}</td> 

Bu çok basit bir örnektir olmalıdır. Şablonlarınızın oluşturulmasını işlemek için daha uygun yollar olabilir, ör. şablon aramaları, bu yüzden Mako documentation'u okumalısınız.

+0

Bu sorunu çözdüğünüz için teşekkürler, __name = '__ main__' ile ne demek istediğini açıklayabilir misiniz? – Bhanukiran

+0

@Bhanukiran: problem yok. [Document] 'de __main__' hakkında bilgi bulabilirsiniz (https://docs.python.org/3/library/__main__.html#module-__main__). – mhawke

İlgili konular