2011-10-28 56 views
2

我對Pyramid真的很陌生(對於一般的網頁框架來說,這是個很新的東西)。在金字塔中,如何從視圖返回原始HTML?

我試圖到一個階段,我可以從視圖中返回原始HTML,這樣我就可以標記從我的mongoDB商店返回的數據。

__init__.py在我的金字塔項目標準:

def main(global_config, **settings): 
""" This function returns a Pyramid WSGI application. 
""" 
config = Configurator(root_factory = Root, settings = settings) 
config.add_view('hermesweb.views.my_view', 
       context = 'hermesweb:resources.Root', 
       renderer = 'hermesweb:templates/mytemplate.pt') 
config.add_static_view('static', 'hermesweb:static', cache_max_age = 3600) 
views.myDB = connect() # connect to my mongoDB 

templates/mytemplate.pt看起來是這樣的:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:tal="http://xml.zope.org/namespaces/tal"> 
<head><title>My test title. . . </title></head> 
<body> 
    <div> 
     <h2>Perform a search</h2> 
     <form method="GET" action=""> 
      <div> 
       <input type="text" name="id"/> 
      </div> 
      <input type="submit" value="Submit"/> 
     </form> 
     <h2>Results</h2> 
     ${results} 
    </div> 
</body 
<html> 

最後,我views.py看起來是這樣的:

myDB = "" # ref to the database is assigned on startup. 
def my_view(request): 
    key = request.GET.get('id', None) 
    results = "" 
    if key: 
     db_res = myDB.call_some_find_function(key) 
     for data in db_res: 
      results = "%s <li> %s </li>" % (results, data) 
     results = "<ul> %s </ul>" % results 

    return {'results': results} 

當我在表單中插入一個術語,並在中插入一個術語210函數被調用,數據庫被查詢,並且正確的結果被取出,但是,而不是返回的字符串變成網頁中的html,它將作爲字符串打印在網頁中。

我懷疑這是與內容類型有關?但我對金字塔還不是很瞭解。有人可以解釋如何得到這個返回由瀏覽器解釋爲HTML的HTML,而不僅僅是一個字符串?

額外的問題 - 我應該甚至使用這種類型的數據庫調用views.py?我仍然對整個Root對象進入它的地方感到困惑。我使用MongoDB作爲數據庫後端。 。 。

回答

0

該字符串正在被轉義,這是插入到模板中的字符串的默認值,以防止將頑皮的代碼注入到您的網站中。爲了將字符串標記爲安全,您需要將其標記爲文字,以免它被轉義。我認爲,金字塔(如塔)附帶的webhelpers模塊,因此你可以導入文字功能:

results = literal("<ul> %s </ul>" %results) 

如果文字不發貨:

from webhelpers.html import literal 

然後用替換您最終結果分配與我懷疑金字塔,看到這個帖子: Python Pyramid & Chameleon templating language escapes html

編輯:請注意,你應該從你的數據庫逃脫你的數據,你輸入它到HTML爲安全起見之前。您可以使用cgi.escape