我正在尝试实现一种模式,我使用中间函数来确定要调用哪个函数并使最终函数执行渲染,但是流程不会最终呈现。我错过了什么?有没有办法调整它以使其工作?
这就是我正在尝试的事情。
@view_config(route='fork_route')
def fork(self):
x = True
if x:
self.my_func1
else:
self.my_func2
#I expected it to render before this point
return dict({'msg':'failed'})
@view_config(renderer="templates/derived/template1")
def my_func1:
return dict({'msg':'msg1'})
@view_config(renderer="templates/derived/template2")
def my_func2:
return dict({'msg':'msg2'})
答案 0 :(得分:4)
金字塔的渲染器非常简单,最后它只是“蟒蛇”。这意味着你从函数中调用函数,没什么特别的。
Pyramid的自动渲染工作方式是:
view_config
仅与当前请求的视图相关。您调用的其他函数只是Python中的函数。
如果您仍想将作品委托给另一个视图,那么有几个选项,但我们告诉别人的是您需要在子视图中明确调用pyramid.renderers.render
或render_to_response
。当然,如果您只调用render
,则必须将该html主体转换为完整的Response
对象。
def fork(request):
return myfunc1(request)
def myfunc1(request):
return render_to_response('templates/derived/template2', {'msg': 'msg1'}, request)
注意myfunc1
如何返回Response
对象,因此fork
(此请求处于活动状态的视图)可以返回它。
否则您需要将结果转换为响应:
def fork(request):
resp = request.response
resp.body = myfunc1(request)
return resp
def myfunc1(request):
return render('templates/derived/template2', {'msg': 'msg1'}, request)
每种方法都有明显的好处和警告。