Я новичок в пирамиде. При попытке использовать хамелеон в качестве механизма шаблонов ему не удается найти шаблон, если он указан с относительным путем — он ищет его по адресу env35/lib/python3.5/site-packages/pyramid/
, где env35 — созданная мной виртуальная среда. Однако он будет работать, если указан полный путь. Он также будет работать, используя относительный путь, используя jinja2 в качестве механизма шаблонов. Почему я не могу использовать шаблон хамелеона, используя относительный путь?
Из руководства
add_view(...., визуализатор,...)
Это либо один строковый термин (например, json), либо строка, подразумевающая путь или спецификацию ресурса (например, templates/views.pt), именующую реализацию средства визуализации. Если значение средства визуализации не содержит точки ., указанная строка будет использоваться для поиска реализации средства визуализации, и эта реализация средства визуализации будет использоваться для создания ответа из возвращаемого значения представления. Если значение средства визуализации содержит точку (.), указанный термин будет рассматриваться как путь, а расширение имени файла последнего элемента в пути будет использоваться для поиска реализации средства визуализации, которому будет передан полный путь. Реализация рендерера будет использоваться для создания ответа из возвращаемого значения представления.
Обратите внимание, что если само представление возвращает ответ (см. View Callable Responses), указанная реализация средства визуализации никогда не вызывается.
Когда средством визуализации является путь, хотя путь обычно представляет собой простое относительное имя пути (например, templates/foo.pt, подразумевая, что шаблон с именем «foo.pt» находится в каталоге «templates» относительно каталога текущего пакета Конфигуратора), путь может быть абсолютным и начинаться с косой черты в UNIX или с префикса буквы диска в Windows. В качестве альтернативы путь может быть спецификацией ресурса в форме some.dotted.package_name:relative/path, что позволяет обращаться к ресурсам шаблона, которые находятся в отдельном пакете.
Атрибут рендерера является необязательным. Если он не определен, предполагается «нулевой» модуль рендеринга (рендеринг не выполняется, и значение передается обратно вышестоящему механизму Pyramid без изменений).
Вот шаги, которые я предпринял для настройки своей среды...
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
test_app.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>
привет.jinja2:
<p>Hello <strong>{{name}}</strong>! (jinja2 renderer)</p>
activate
. - person Steve Piercy   schedule 15.09.2017