Пирамида не может получить доступ к статическому активу (ни к изображению .jpg, ни к файлу .js)

#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 в качестве механизма создания шаблонов, вы можете увидеть другие примеры создания проекта и правильного синтаксиса. Смотрите документацию для руководства.