代码之家  ›  专栏  ›  技术社区  ›  Dave

使用相对路径无法找到金字塔的变色龙渲染器模板

  •  0
  • Dave  · 技术社区  · 7 年前

    env35/lib/python3.5/site-packages/pyramid/ 其中env35是我创建的虚拟环境。但是,如果指定了完整路径,它将起作用。它还将使用相对路径,使用jinja2作为模板引擎。

    从手册中

    添加视图(…..,渲染器…)

    命名渲染器实现。如果渲染器值没有 渲染器实现,并将使用该渲染器实现 从视图返回值构造响应。如果渲染器 用于查找将要传递的渲染器实现 完整路径。渲染器实现将用于构造 来自视图的响应返回值。

    当渲染器是路径时,尽管路径通常只是一个简单的相对路径名(例如templates/foo.pt,这意味着 绝对值,在UNIX上以斜杠开头,在UNIX上以驱动器号前缀开头 窗户。路径也可以是表单中的资产规范 一些星罗棋布的。包名称:相对/路径,可以寻址 位于单独包中的模板资产。

    未经修改传回上游金字塔机械)。

    export VENV=~/Documents/app_projects/pyramid_tutorial/env35
    python3 -m venv $VENV
    source $VENV/bin/activate  #activate the virtual environment
    pip install --upgrade pip
    pip install pyramid 
    pip install wheel
    pip install pyramid_chameleon
    pip install pyramid_jinja2
    

    我的文件结构:

    pyramid_tutorial
        env35
            bin
            ...
        templates
            hello.jinja2
            hello.pt
        test_app.py
    

    测试应用程序。py:

    from wsgiref.simple_server import make_server
    from pyramid.config import Configurator
    from pyramid.response import Response
    from pyramid.view import view_config
    
    def hello(request):
        return dict(name='Bugs Bunny')
    
    if __name__ == '__main__':
        config = Configurator()
        config.include('pyramid_chameleon')
        config.include('pyramid_jinja2')
    
        #This does not work... http://localhost:6543/chameleon
        config.add_route('hello_world_1', '/chameleon')
        config.add_view(hello, route_name='hello_world_1', renderer='templates/hello.pt')
        # ValueError: Missing template asset: templates/hello.pt (/home/david/Documents/app_projects/pyramid_tutorial/env35/lib/python3.5/site-packages/pyramid/templates/hello.pt)
    
        #This works... http://localhost:6543/chameleon2
        config.add_route('hello_world_2', '/chameleon2')
        config.add_view(hello, route_name='hello_world_2', renderer='/home/david/Documents/app_projects/pyramid_tutorial/templates/hello.pt')
    
        #This works... http://localhost:6543/jinja
        config.add_route('hello_world_3', '/jinja')
        config.add_view(hello, route_name='hello_world_3', renderer='templates/hello.jinja2')
    
        app = config.make_wsgi_app()
        server = make_server('0.0.0.0', 6543, app)
        print ('Serving at http://127.0.0.1:6543')
        server.serve_forever()
    

    你好pt:

    <p>Hello <strong>${name}</strong>! (Chameleon renderer)</p>
    

    <p>Hello <strong>{{name}}</strong>! (jinja2 renderer)</p>
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Michael Merickel    7 年前

    如果您指定,它将起作用 renderer=__name__ + ':templates/hello.pt' . 在这种情况下,解析逻辑不起作用,因为文件不是作为python包执行的,因此可能会发生一些奇怪的事情。 pyramid_chameleon

    如果你稍微调整一下,把你的脚本作为一个模块通过 python -m test_app .

    推荐文章