为什么在我的金字塔视图可调用中必须包含返回语句?
我正在尝试为我的Pyramid应用程序的主页创建一个视图可调用对象,并且在这里阅读有关视图可调用对象的内容: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语句,但如果没有提交,就只渲染编辑模板。
1 个回答
首先,建议你使用最新的Pyramid文档版本(针对Pyramid 1.4版本),可以在这里找到:http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/views.html(我假设你正在使用最新的Pyramid版本)。
关于return
语句,通常你会返回一个字典,即使这个字典是空的,因为你的Chameleon模板文件(edit.pt)是期待这个字典的。@view_config(renderer='templates/edit.pt')
这行代码告诉下一行的函数要把这个字典传递给edit.pt,这样模板引擎才能把模板中的变量替换掉。
另一方面,HTTPFound()
会跳过模板(@view_config()
中的renderer
参数会被忽略,也就是说不会使用任何模板),而是进行一个内部的重定向到另一个路由,这个路由会在你的__init__.py
中指定。至于那个新路由是否在它的@view_config
中使用模板/渲染器,这和之前跳过渲染器的函数是没有关系的。
如果模板中没有你想填充的变量,那么你最后一行的return
语句应该是return {}
。
如果需要的话,请告诉我如何能让这个解释更清楚。