在金字塔URL调度(add_route)中传递多值作为参数

时间:2018-04-08 22:00:36

标签: python routes pyramid

如何在金字塔中配置和使用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中使用它。

2 个答案:

答案 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)。对此的支持是有限的,但如果它适合您的用例,它确实有效。请注意,空列表在此处有效,因此您需要处理它。