2013-10-10 52 views
0

我剛開始金字塔,並加載視圖時出現問題。我想加載一個基於從數據庫中提取的變量的視圖,就像我的PHP解決方案一樣:rewrite url with htaccessPython金字塔:基於數據庫變量加載視圖

我已經構建了一個可以執行此操作的腳本,但我確信這不是正確的方法它。我想當我在一個真實的網站上使用它時,它會變得非常複雜和混亂。有人可以解釋如何正確或指向我的其他解決方案?

我當前的腳本:

config.add_route('home', '/') 
config.add_route('admin_home', '/admin') 
config.add_route('admin_pages', '/admin/pages') 
config.add_static_view(name='static', path='website:static') 

config.add_route('view_loader', '/*url') 

views.py

class ViewLoader(object): 
    def __init__(self, request): 
     self.request = request 

    @view_config(route_name="view_loader", renderer="templates/view_loader.pt") 
    def view_loader(self): 
     request = self.request 
     url = "/%s" % request.matchdict["url"] 
     page = DBSession.query(Pages).filter_by(url=url).one() 
     return dict(title=page.title, include=page.template) 

view_loader.pt

<!DOCTYPE html> 
<html> 
<body> 
    <metal:main use-macro="load: ${include}"></metal:main> 
</body> 
</html> 

系統的理念:

管理員可以創建一個頁面cms隨機網址是d必須選擇一個模板。系統必須生成這些頁面。

  • URL = /隨機/隨機 - >尋找在DB模板 - >渲染template_1
  • URL =/random2/random2 - >尋找在DB模板 - >渲染template_2

所以我想在調用類/方法之後渲染模板以確定要渲染的模板

+0

代替返回的dict()你可以做一些像'return HTTPFound(request.route_url(page.route_name))'? –

+0

感謝您的迴應,但如果我理解正確,網址將會改變,那不是我的意思。我會盡力澄清我的問題。 – Jab

+0

您可以隨時從您的視圖中調用另一種方法; '如果sometest:return otherview(request)'。 –

回答

0

我發現了一個更合乎邏輯的方法來解決我的問題Map different URLs to same view。其實解決辦法很簡單我只是不知道這是可能在add_view()

main.py申報渲染

pages = DBSession.query(Pages) 
for page in pages: 
    config.add_route(str(page.name), page.url) 
    if page.template.decode('utf-8') == "home_view": 
     config.add_view(home_view, route_name=str(page.name), renderer='templates/home.pt')   
    elif page.template.decode('utf-8') == "detail_view": 
     config.add_view(home_view, route_name=str(page.name), renderer='templates/detail.pt')  

views.py

def home_view(self, request): 
    return dict(.....)