为什么我必须在我的金字塔视图中包含一个可以调用的return语句?

时间:2013-01-30 02:16:37

标签: python pyramid

我正在尝试为我的金字塔应用程序的主页形成可调用的视图,并且正在阅读这里的视图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语句,但如果他们不只是呈现编辑模板。

1 个答案:

答案 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 {}

如果需要,请告诉我如何让您更清楚。