Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我必须在金字塔视图callable中包含return语句?_Python_Pyramid - Fatal编程技术网

Python 为什么我必须在金字塔视图callable中包含return语句?

Python 为什么我必须在金字塔视图callable中包含return语句?,python,pyramid,Python,Pyramid,我正在尝试为我的pyramid应用程序的主页创建可调用视图,并在此处阅读有关可调用视图的内容: 但似乎你最后总要有一个回报。我不明白。我不希望调用的视图返回任何内容。如果我打算用英语(而不是python代码)编写它,我会 @view_config(route_name='home_page', renderer='templates/edit.pt') def home_page(request): if 'form.submitted' in request.params:

我正在尝试为我的pyramid应用程序的主页创建可调用视图,并在此处阅读有关可调用视图的内容:

但似乎你最后总要有一个回报。我不明白。我不希望调用的视图返回任何内容。如果我打算用英语(而不是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.4)(因为我假设您使用的是最新的金字塔版本)

对于
return
语句,您通常
return
字典,即使它是空的,因为您的变色龙模板文件(edit.pt)需要它
@view\u config(renderer='templates/edit.pt')
告诉下一行的函数将字典传递给edit.pt,以便模板引擎可以替换模板中的变量

HTTPFound()
,另一方面,绕过模板(忽略
@view\u config()
呈现程序
参数,即不使用模板),并执行内部重定向
\u init\u.py
将指定的另一个路由。现在,新路由是否在其
@view\u config
中使用模板/渲染器独立于先前跳过渲染器的函数

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


如果需要的话,请让我知道如何为您更清楚地说明这一点。

首先,使用最新的金字塔文档版本(对于金字塔版本1.4)(因为我假设您使用的是最新的金字塔版本)

对于
return
语句,您通常
return
字典,即使它是空的,因为您的变色龙模板文件(edit.pt)需要它
@view\u config(renderer='templates/edit.pt')
告诉下一行的函数将字典传递给edit.pt,以便模板引擎可以替换模板中的变量

HTTPFound()
,另一方面,绕过模板(忽略
@view\u config()
呈现程序
参数,即不使用模板),并执行内部重定向
\u init\u.py
将指定的另一个路由。现在,新路由是否在其
@view\u config
中使用模板/渲染器独立于先前跳过渲染器的函数

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


如果需要,请让我知道如何为您更清楚地说明这一点。

注意,在这种情况下(编辑表单),如果您希望使用模型(第页)中存储的当前值填充表单,您确实希望从视图函数返回一些内容。我想您需要在数据库中找到正在编辑的页面对象,并将其传递给模板以填充所有输入和文本区域。在一些罕见的情况下,您不需要向模板传递任何内容(考虑一个基本的“添加新项”表单),在这种情况下,您可以只返回None或空dict。请注意,在这种情况下(编辑表单),如果您想用存储在模型中的当前值填充表单,您实际上希望从view函数返回一些内容(页面)。我想您需要在数据库中找到正在编辑的页面对象,并将其传递给模板,以填充所有输入和文本区域。在某些罕见的情况下,您不需要向模板传递任何内容(请考虑一个基本的“添加新项”表单),在这种情况下,您可以只返回None或空的dict。这是一个极好的解释,完全回答了我的问题,但有一件事我仍然不明白。在我的edit.pt模板上,我有一个输入表单,其中包含一个带有tal:content=“page.data”的文本区域。当用户访问主页时,不应填充此表单,因此无需在return Station,correct?page中将任何内容传递到字典中。数据是指在提交表单时保存到数据库中,以便在数据库中创建新条目(通过该return HTTP语句创建).现在,我收到page.data的名称错误,我想知道这是否是原因。我认为您希望使用以前的数据预填充表单,以防出现提交错误。为此,您可以使用条件语句(
if
/
else
使用“变色龙模板代码”)在
page.data
之前,确保此变量存在(因为第一次加载页面时,该变量显然不存在,因为用户尚未提交该字段中包含值的表单)。这是一个极好的解释,完全回答了我的问题,但有一件事我仍然不明白。在我的edit.pt模板上,我有一个输入表单,其中包含一个带有tal:content=“page.data”的文本区域。当用户访问主页时,不应填充此表单,因此无需在return Station,correct?page中将任何内容传递到字典中。数据是指在提交表单时保存到数据库中,以便在数据库中创建新条目(通过该return HTTP语句创建).现在我发现page.data的名称出现错误,我想知道这是否是原因。我认为您希望使用以前的数据预填充表单,以防出现提交错误。为此,您可以