0

我刚开始使用金字塔并在加载视图时遇到问题。我想加载一个基于从数据库中获取的变量的视图,就像我的 PHP 解决方案一样:rewrite url with htaccess

我已经构建了一个可以执行此操作的脚本,但我很确定这不是正确的方法。我认为当我在真实站点中使用它时,它会变得非常复杂和混乱。有人可以解释一下如何正确地解决这个问题或将我指向其他解决方案吗?

我当前的脚本:

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

视图.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>

系统理念:

管理员可以在带有随机 url 的 cms 中创建页面,并且必须选择一个模板。系统必须生成这些页面。

  • url = /random/random -> 在 db 中查找模板 -> 渲染 template_1
  • url = /random2/random2 -> 在 db 中查找模板 -> 渲染 template_2

所以我想在调用类/方法以确定必须渲染哪个模板之后渲染模板

4

1 回答 1

0

在这个问题Map different URLs to same view的帮助下,我找到了一种更合乎逻辑的方法来解决我的问题。实际上解决方案很简单我只是不知道可以在 add_view() 中声明一个渲染器

主文件

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

视图.py

def home_view(self, request):
    return dict(.....)
于 2013-10-11T17:34:47.050 回答