#javascript #static #assets #pyramid #mako
Вопрос:
У меня есть больший тестовый набор, в котором используются Pyramid и Mako, а также Javascript. Это работает нормально, если я не помещу код Javascript в отдельный файл. Затем это терпит неудачу. Я сократил тестовый случай до следующего (3 файла), заменив файл JS простым изображением, которое я хотел загрузить, но это тоже не удается с тем же сообщением об ошибке:
NotImplementedError: не могу выполнить эту операцию для незарегистрированных погрузчик типа
127.0.0.1 — — [15/окт/2021 10:46:44] «получить /static/system6.jpg протокол HTTP/1.1» 500 59
127.0.0.1 — — [15/окт/2021 10:46:44] «получить /фавикон.Ико протоколу HTTP/1.1» 404 164
post_trypyramid.py:
from pyramid.config import Configurator
if __name__ == '__main__':
with Configurator() as config:
config.include("pyramid_mako")
config.add_route('home', '/')
config.add_route('system', '/system')
config.add_static_view(name='static', path='static')
config.scan('post_trypyramid_views')
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 6543, app)
server.serve_forever()
post_pyramid_views.py:
from pyramid.httpexceptions import HTTPFound, HTTPNotFound
from pyramid.response import Response
from pyramid.view import view_config
@view_config(route_name='home')
def home_view(request):
return Response('<p>Welcome</p>')
@view_config(route_name='system', renderer='post_trypyramid_template.mako')
def form_view(request):
return {"Nothing": "nothing"}
post_trypyramid_template.мако:
<head>
<title>My SANDBOX</title>
<meta charset="utf-8"/>
</head>
<body>
<h1>Settings:</h1>
<img src="static/system6.jpg" alt="Here you should see an image">
<img src="{{ request.static_url('__main__:static/system6.jpg') }}" alt="Here you should see an image" >
</body>
</html>
Я запускаю приложение в «C:/Users/myAccount/Projects/TryPyramid» но на веб-странице нет изображения, только заголовок.
Если я заменю вызов «add_static_view()» выше на абсолютный путь, например
«config.add_static_view(имя=»статический», путь=»C:/Users/myAccount/Projects/TryPyramid/static’)»
тогда, по крайней мере, первое «<img …>» приведет к изображению в браузере.
Так что же не так с моей настройкой относительного пути?? Или чего еще мне не хватает?
Я перепробовал всевозможные модификации, такие как завершающие или ведущие косые черты. Ничто не помогало
Любой намек приветствуется. Спасибо.
Ответ №1:
Вы используете синтаксис Jinja2 в шаблоне Mako. В качестве отступления, вы должны использовать название проекта, а не __main__
. Попробуй это:
<img src="${ request.static_url('myproject:static/system6.jpg') }" alt="Here you should see an image" >
Если вы используете pyramid-cookiecutter-starter для создания начального проекта, используя Mako в качестве механизма создания шаблонов, вы можете увидеть другие примеры создания проекта и правильного синтаксиса. Смотрите документацию для руководства.