我正在尝试为我的金字塔应用程序的主页形成可调用的视图,并且正在阅读这里的视图callables:http://docs.pylonsproject.org/projects/pyramid/en/1.0-branch/narr/views.html
但似乎你总是必须在最后得到一个回报。我不明白这一点。我不希望视图可调用返回任何东西。如果我打算用英文写的(不是python代码)我会把
@view_config(route_name='home_page', renderer='templates/edit.pt')
def home_page(request):
if 'form.submitted' in request.params:
name= request.params['name']
body = request.params['body']
page=Page(name,body)
DBSession.add(page)
return HTTPFound(Location=request.route_url('view_page',pagename=name))
return {the edit.pt template i mentioned in the first line}
但似乎没有办法做到这一点。我必须返回一个字符串,字典或其他东西。我怎么能告诉python。因此,如果人们提交该表单,则返回该HTTPFound语句,但如果他们不只是呈现编辑模板。
答案 0 :(得分:5)
首先,使用最新的Pyramid docs版本(适用于Pyramid版本1.4)http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/views.html(因为我假设您使用的是最新的Pyramid版本)。
对于return
语句,您通常return
字典,即使它是空的,因为您的变色龙模板文件( edit.pt )期待它。 @view_config(renderer='templates/edit.pt')
告诉下一行的函数将字典传递给 edit.pt ,因此模板引擎可以替换模板中的变量。
HTTPFound()
,另一方面,绕过模板(renderer
@view_config()
参数被忽略,即 没有使用模板)并将内部重定向发送到__init__.py
将要求的另一条路线。现在,新路由是否在其@view_config
中使用模板/渲染器与先前跳过渲染器的函数无关。
如果模板中没有要填充的变量,那么最后一行的return
语句应为 return {}
。
如果需要,请告诉我如何让您更清楚。