如何在金字塔中配置和使用multidict。
config.add_route('show_choosed_categories', '/categories/[list]')
并生成像
这样的网址${request.route_url('show_choosed_categories', categories=[1, 2] )}
在视图中我会使用
request.GET.getall('categories')
金字塔似乎通过webob.multidict支持它 - 多值字典对象https://docs.pylonsproject.org/projects/webob/en/stable/api/multidict.html
但如何在URL Dispatch中使用它。
答案 0 :(得分:0)
您配置的路线仅匹配字符串文字[list]
。路由不能匹配Python对象,只能匹配字符串和替换标记。来自Route Pattern Syntax under URL Dispatch:
模式片段(模式中
/
个字符之间的单个项目)可以是文字字符串(例如foo
),也可以是替换标记(例如{foo}
}),或两者的某种组合。
尽管如此,您可以从请求对象中提取多指令。
# Conjugation of English verbs is horrible
config.add_route('show_chosen_categories', '/categories/')
假设您有一个名为相同或在表单中选择多个输入的复选框列表,其中任一输入名为category
,那么您的请求参数将生成如下:
category=1&category=2
然后,匹配任何以categories
开头的网址,并且您的视图中的请求参数将可用,具体取决于您的表单操作:
# form action="POST"
request.POST.getall('category')
# form action="GET"
request.GET.getall('category')
>>> [1, 2]
有关详细信息,请参阅Multidict under Request and Response Objects。
答案 1 :(得分:0)
您可能正在寻找config.add_route('foo', '/categories/*subpath')
和request.route_url('foo', subpath=(1, 2, 3)
。对此的支持是有限的,但如果它适合您的用例,它确实有效。请注意,空列表在此处有效,因此您需要处理它。