gpt4 book ai didi

python - Pyramid :从列表生成 json View

转载 作者:行者123 更新时间:2023-12-01 23:07:42 25 4
gpt4 key购买 nike

如何使用 Pyramid 从字符串列表生成 json View ?

以下尝试仅生成列表最后一个元素的 View ; jkl_json 在这种情况下,其他生成 404 Not Found

names = ['abc', 'def', 'ghi', 'jkl']
for nm in names:
@view_config(route_name='{}_json'.format(nm),
renderer='json',)
def names_json(request):
nm_cls = globals()[nm.title()]
...

这确实适用于 html View ;但不是 json View 。

最佳答案

发生这种情况是因为 Pyramid 使用 Venusian 库作为装饰器;他们将信息附加到功能上,而不是立即注册 View 。此信息稍后由 config.scan 处理,然后才真正注册路由。在您的代码中,您在每个循环中将 names_json 函数替换为 另一个 函数,名称相同。由于只有最后一个在模块中可见,只有最后一个 view_config 数据附加到它,这就是 Venusian 在扫描时拾取的内容。


您应该将装饰器仅应用于一个函数。如果你还记得的话

 @view_config(route_name='foo')
def bar(request):
return Response()

只是

的语法糖
 def bar(request):
return Response()

bar = view_config(route_name='foo')

你可以做到

def names_json(request):
...

names = ['abc', 'def', 'ghi', 'jkl']
for nm in names:
names_json = view_config(route_name='{}_json'.format(nm),
renderer='json')(names_json)

另一方面,如果路径是这样的,也许你可以只对所有路径使用一条路径:

config.add_route('names', '/foo/{name:abc|def|ghi|jkl}.json')

路由匹配任何/foo/abc.json, /foo/def.json, /foo/ghi.json/foo/jkl.json,名称将在 View 中作为 request.matchdict['name'] 提供。

关于python - Pyramid :从列表生成 json View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37990129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com