2016-03-31 17 views
0

Python開発のためのcherrypyフレームワークを学習しています。データベースを作成し、データを挿入しました。これを取得してbrowser.Dataに表示したいのですが、データはsqliteデータベースに作成されますが、ブラウザでデータを印刷する代わりにループを作成します。 cherrypyフレームワークでhtmlファイル内のpythonコードを使用するには?

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

私のhtmlファイル

<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 

答えて

2

あなたのHTMLファイルは、実際にレンダリングされる必要があるテンプレート(あなたがMakoを使用しているように見える)です。

現在のところ、コードはテンプレートファイルを開いてファイルオブジェクトを返すだけです。これにより、cherrypyはそのファイルの内容をそのまま返します。 c.fetchall()代わりにfetchone()の使用すべきであること

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

注:あなたがインストールされていると仮定すると

は、テンプレートをレンダリングするための最も簡単な方法は、このようなものですMAKO。

colが正しく参照されていないテンプレートにもエラーがありました。これは、これは非常に単純な例ではありません

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

 <td>${col}</td> 

でなければなりません。テンプレートのレンダリングを処理する、より便利な方法があります。テンプレートルックアップなので、Mako documentationを読んでください。

+0

これは私の問題を解決しました。あなたは__name = '__ main__'の意味を説明できますか? – Bhanukiran

+0

@Bhanukiran:問題ありません。 '__main__'については、[documentation](https://docs.python.org/3/library/__main__.html#module-__main__)を参照してください。 – mhawke

関連する問題