#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. «Мой мозг на самом деле функционировал не так, как я надеялся прошлой ночью». Мне знакомо это чувство 😉