这个错误是什么意思:ValueError:渲染器接收到的值不是字典

3 投票
1 回答
2376 浏览
提问于 2025-04-17 13:58

现在我有一个用Python写的Pyramid应用程序,它的主页是通过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函数应该把用户重定向到一个新的永久网址,这个网址会显示页面名称和页面内容。

我不太确定在我的home_page视图配置中的if语句后面应该加什么。如果表单没有被提交,我不想让它做任何事情,只希望继续显示那个edit.pt模板。现在,当我尝试访问主页时,出现了一个错误:ValueError: renderer was passed non-dictionary as value。

1 个回答

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

撰写回答