gpt4 book ai didi

python - 在 Pyramid 中分离 view_config 路由和渲染

转载 作者:太空宇宙 更新时间:2023-11-04 10:57:40 25 4
gpt4 key购买 nike

我正在尝试实现一种模式,在该模式中,我使用中间函数来确定调用哪个函数并让最终函数执行渲染,但流程不会以渲染结束。我错过了什么?有没有办法调整它以使其工作?

这就是我正在尝试的。

@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'})

最佳答案

Pyramid 的渲染器非常简单,最后它“只是 python”。这意味着您是从函数中调用函数,没有什么特别的。

Pyramid 的自动渲染工作方式是:

  1. 请求传入,被分派(dispatch)到 View 。
  2. 如果那个特定 View View 没有返回响应对象,那么 Pyramid 会尝试将您从 View 返回的值传递到附加的渲染器中。

view_config 仅与当前请求的 View 相关。您调用的其他函数只是 Python 中的函数。

如果您仍然想将工作委托(delegate)给另一个 View ,那么有几个选项,但我们告诉人们的一个是您需要在 subview 中显式调用 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(针对此请求处于事件状态的 View )可以直接返回它。

否则你需要将结果转化为响应:

def fork(request):
resp = request.response
resp.body = myfunc1(request)
return resp

def myfunc1(request):
return render('templates/derived/template2', {'msg': 'msg1'}, request)

显然,每种方法都有好处和注意事项。

关于python - 在 Pyramid 中分离 view_config 路由和渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8483096/

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