Python 此错误的含义是什么:ValueError:渲染器以非字典形式作为值传递

Python 此错误的含义是什么:ValueError:渲染器以非字典形式作为值传递,python,pylons,pyramid,Python,Pylons,Pyramid,现在我有一个pyramid(python)应用程序,它的主页位于init.py文件中: config.add_route('home_page', '/') 在my views.py文件中,我有: @view_config(route_name='home_page', renderer='templates/edit.pt') def home_page(request): if 'form.submitted' in request.params: name= r

现在我有一个pyramid(python)应用程序,它的主页位于init.py文件中:

 config.add_route('home_page', '/')
在my views.py文件中,我有:

@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))
在我的edit.pt模板中

<form action="${save_url}" method="post">
    <textarea name="name" tal:content="page.data" rows="10"
                    cols="60"/><br/>
    <textarea name="body" tal:content="page.name" rows="10"
                    cols="60"/><br/>
<input type="submit" name=form.submitted value="Save"/>
</form>



基本上,我们的目标是让主页显示这个edit.pt模板,它包含一个表单,用于提交两条信息,一个页面名称和页面正文。提交表单后,return-HTTPFound函数应重定向到创建的视图页面,该页面在新的永久url上显示页面名称页面正文


我不确定在主页视图配置中的if语句之后应该添加什么。如果表单尚未提交,我不希望发生任何事情,它应该继续显示edit.pt模板。现在我在尝试访问主页时遇到一个错误:ValueError:renderer作为值传递给了非字典

看起来您缺少了一个条件

@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))

    # form was not submitted here, need to return context
    # ValueError: renderer was passed non-dictionary as value < beacuase you were
    # not returning context for this case before
    return {} # template contenxt here
@view\u config(route\u name='home\u page',renderer='templates/edit.pt')
def主页(请求):
如果request.params中的“form.submitted”:
name=request.params['name']
body=request.params['body']
页面=页面(名称、正文)
DBSession.add(第页)
返回HTTPFound(Location=request.route\u url('view\u page',pagename=name))
#表单未在此处提交,需要返回上下文
#ValueError:渲染器以值<非字典形式传递,因为您是
#之前未返回此案例的上下文
在此处返回{}#模板上下文

那么,在返回函数中,即使我已经使用了模板/edit.pt,我是否还要再次放置模板?我可以通过返回路径调用它。request_url('home_page',renderer='templates/edit.pt')@BigBoy1337,nope,
templates/edit.pt
应该自动加载您在字典中返回的值。您可以键入
{'save_url':'http://your_url.com“}
但听起来像是一个独立于应用程序其余部分的域,该应用程序位于for ex:。我不明白它是怎么做到的。如何在上生成url?