这个错误意味着什么:ValueError:渲染器作为值传递给非字典

时间:2013-01-28 20:05:37

标签: python pylons pyramid

现在我有一个金字塔(python)应用程序,主页通过 init .py文件中的此路由到达:

 config.add_route('home_page', '/')

在我的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模板,其中包含一个用于提交两条信息的表单,一个页面名称和一个页面正文。提交表单后,返回HTTPFound函数应重定向到创建的view_page,该view_page显示新永久URL上的页面名称页面正文。

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

1 个答案:

答案 0 :(得分:8)

看起来你错过了一个条件

@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