金字塔:从列表生成 json 视图
Pyramid: generate json views from list
如何使用 Pyramid 从字符串列表生成 json
视图?
通过以下尝试,仅生成列表最后一个元素的视图; 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 视图;但没有 json 观看次数。
我建议使用 Configurator.add_view 方法以编程方式添加视图:
def json_view(request):
...
names = ['abc', 'def', 'ghi', 'jkl']
for nm in names:
config.add_view(json_view, route_name='{}_json'.format(nm),
renderer='json',)
你在循环中使用装饰器的方法不太可能工作,即使 html 我认为...
发生这种情况是因为 Pyramid 使用 Venusian 库作为装饰器;他们将信息附加到功能上,而不是立即注册视图。此信息稍后由 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
中的任何一个,名称将在 request.matchdict['name']
中可用查看。
如何使用 Pyramid 从字符串列表生成 json
视图?
通过以下尝试,仅生成列表最后一个元素的视图; 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 视图;但没有 json 观看次数。
我建议使用 Configurator.add_view 方法以编程方式添加视图:
def json_view(request):
...
names = ['abc', 'def', 'ghi', 'jkl']
for nm in names:
config.add_view(json_view, route_name='{}_json'.format(nm),
renderer='json',)
你在循环中使用装饰器的方法不太可能工作,即使 html 我认为...
发生这种情况是因为 Pyramid 使用 Venusian 库作为装饰器;他们将信息附加到功能上,而不是立即注册视图。此信息稍后由 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
中的任何一个,名称将在 request.matchdict['name']
中可用查看。