Pyramid路由如何配置可选URL段实现/user、/user/edit路径正常访问
方案1:单路由+可选参数(推荐,适合同前缀下多action的场景)
你之前的配置问题在于路由中的{action}是必填占位符,没有设置默认值,所以/user路径无法匹配到该路由。修正方式如下:
- 路由注册时给
action设置默认值,让无后缀的/user也能命中该路由:
config.add_route('user', '/user/{action}', defaults={'action': 'general'})
- 视图配置对应
match_param即可:
from pyramid.view import view_defaults, view_config from pyramid.response import Response @view_defaults(route_name="user") class UserViews(): def __init__(self, request): self.request = request @view_config(match_param="action=general") def user_general(self): return Response("General User Info") @view_config(match_param="action=edit") def edit(self): return Response("Editing user")
方案2:显式注册两条独立路由
你之前的配置大概率是路由注册顺序错误,或者没有给两个路由分别绑定视图。Pyramid路由匹配遵循先注册先匹配规则,需要先注册更具体的长路径,再注册短路径:
- 按顺序注册路由:
# 先注册具体子路径,避免被短路径路由提前拦截 config.add_route('user_edit', '/user/edit') config.add_route('user_index', '/user')
- 给对应方法绑定对应路由名即可:
@view_defaults() class UserViews(): def __init__(self, request): self.request = request @view_config(route_name="user_index") def user_general(self): return Response("General User Info") @view_config(route_name="user_edit") def edit(self): return Response("Editing user")
错误原因说明
- 第一种原始配置问题:
{action}为必填占位符,无默认值时/user无法命中路由,直接返回404 - 第二种原始配置问题:若先注册
/user路由,/user/edit会被该路由优先拦截,找不到对应视图就返回404;若未给两个路由分别绑定视图也会触发404 - 你尝试的
match_param="action="无效是因为/user路径根本没有命中带action参数的路由,参数匹配逻辑不会触发
内容的提问来源于stack exchange,提问作者match
相关产品推荐
相关产品推荐

