возможная странная ошибка в веб-фреймворке пирамиды

#pyramid #pyramid-debug-toolbar

Вопрос:

Я следовал инструкциям учебника по веб-фреймворку пирамиды, приведенным по ссылке: https://docs.pylonsproject.org/projects/pyramid/en/latest/quick_tutorial/cookiecutters.html

После его настройки и посещения http://localhost:6543/ все работает, как и ожидалось, с названием проекта «Каркас пирамиды» в названии маршрута, которое отображается правильно.

Затем я добавил вторую функцию просмотра и добавил ее в маршрут. Но затем домашний маршрут начинает показывать 404. Второй маршрут работает, но первый маршрут и представление перестают работать и дают 404 при загрузке в браузер.

Я не могу найти, в чем проблема. После добавления нескольких функций и маршрутов я не смог найти проблему. Я думаю, что это какая-то проблема с предоставленной структурой cookiecutter или самой пирамидой. Раньше такого никогда не случалось с версией пирамиды меньше 2. Также пробовал добавлять разные виды и маршруты. Кажется, работает только один маршрут, а все остальные возвращают исключение 404.

Никакие файлы, кроме перечисленных здесь, не были удалены или отредактированы.

Может кто-нибудь, пожалуйста, помочь мне с этим?

Исходное содержимое файлов

 # File location 'views/default.py"

from pyramid.view import view_config


@view_config(route_name='home', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_view(request):
    return {'project': 'Pyramid Scaffold'}
 

и

 # File location 'routes.py"


def includeme(config):
    config.add_static_view('static', 'static', cache_max_age=3600)
    config.add_route('home', '/')
 

После моих изменений

 # File location 'views/default.py"

from pyramid.view import view_config


@view_config(route_name='home', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_view(request):
    return {'project': 'Pyramid Scaffold'}


@view_config(route_name='second', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_view(request):
    return {'project': 'this works'}
 

и

 # File location 'routes.py"


def includeme(config):
    config.add_static_view('static', 'static', cache_max_age=3600)
    config.add_route('home', '/')
    config.add_route('second', '/second')
 

регистрация ошибок в терминале:

 2021-10-01 02:41:29,880 INFO  [pyramid_debugtoolbar:287][waitress-0] Squashed pyramid.httpexceptions.HTTPNotFound at http://localhost:6543/
traceback url: http://localhost:6543/_debug_toolbar/313430323330373531313831343038/exception
 

При посещении URL-адреса обратной трассировки нет никакой полезной информации, кроме слов

 env/lib/python3.8/site-packages/pyramid/router.py", line 169, in handle_request
raise HTTPNotFound(msg)
 

Ответ №1:

Ошибки почти всегда присутствуют в коде разработчика и редко в таких зрелых пакетах, как Pyramid.

В вашем случае вы определили два метода с одинаковым именем, заменив первый вторым. Поэтому вид для первого маршрута home был удален.

Чтобы исправить ситуацию, дайте второй функции просмотра уникальное имя.

 @view_config(route_name='second', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_second_view(request):
    return {'project': 'this works'}
 

Комментарии:

1. Мой мозг на самом деле функционировал не так, как я надеялся прошлой ночью. Сделал аналогичные ошибки и в python тоже после перехода от стройного js-кода переднего плана. Мне сейчас так неловко. Я вижу, что вы являетесь основным участником веб-платформы pyramid, а также многих других проектов. Спасибо за те усилия, которые вы приложили.

2. «Мой мозг на самом деле функционировал не так, как я надеялся прошлой ночью». Мне знакомо это чувство 😉