0

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

4

1 回答 1

5

首先,使用最新的 Pyramid 文档版本(对于 Pyramid 版本 1.4)http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/views.html(因为我假设您使用的是最新的 Pyramid 版本)。

至于return语句,您通常是return一个 dictionary,即使它是空的,因为您的 Chameleon 模板文件 ( edit.pt ) 正在期待它。@view_config(renderer='templates/edit.pt')告诉下一行的函数将字典传递给edit.pt,因此模板引擎可以替换模板中的变量。

HTTPFound(),另一方面,绕过模板renderer参数 of@view_config()被忽略, 没有使用模板)并执行内部重定向到您__init__.py将指定的另一条路线。现在,新路由是否在其中使用模板/渲染器@view_config与之前跳过渲染器的函数无关。

如果模板中没有要填充的变量,则最后一行的return语句应该是。return {}

如果需要,请告诉我如何让您更清楚地了解这一点。

于 2013-01-30T04:40:27.767 回答