request.params中的关键错误

时间:2015-01-21 04:26:01

标签: python shell pyramid

我是Python的初学者,我必须创建一个金字塔项目,接受来自from的用户输入,并执行一个简单的操作,将结果返回给用户。 这是我的views.py

 from pyramid.response import Response
from pyramid.view import view_config
@view_config(route_name="home",renderer='templates/ui.pt')
def my_view(request):
    myvar=request.params['command']
    return Response(myvar)

这是我的templates / ui.pt(不包括所有初始html,head标签)

    <form action="my_view" method="POST"><input type="text" name="command"/>
<input type="submit" name="go" value="submit"/></form>
</html>

当我运行它时,我收到此错误 的 KeyError异常:&#39;命令&#39;

请帮忙。

2 个答案:

答案 0 :(得分:4)

如果您的请求中没有传递任何参数(如果您访问该页面而未向其发帖或向查询字符串添加参数 - http://mypage/my_view?command=something)会发生这种情况,那么request.params MultiDict赢了& #39; t有一个名为&#39;命令&#39;在它和你的错误来自哪里。您可以明确检查是否&#39;命令&#39;在你的request.params:

myvar = None
if 'command' in request.params:
    myvar = request.params['command']

或者您可以(更常见地)使用字典的get方法来提供默认值:

myvar = request.params.get('command', None)

此外,由于您为视图定义了模板,因此通常,您的返回值将为该模板提供上下文。但是,您的代码实际上并未使用模板,而是直接返回响应。你通常不会这样做。你可以做更多这样的事情:

@view_config(route_name="home",renderer='templates/ui.pt')
def my_view(request):
    myvar=request.params.get('command',None)
    return {'myvar': myvar }

然后在你的模板中,你引用它传递的对象:

<!doctype html>
<html>
<body>
<form method="POST"><input type="text" name="command"/>
<input type="submit" name="go" value="submit"/></form>
<div tal:condition="myvar">
   You entered <tal:block tal:content="myvar"></tal:block>
</div>
</body>
</html>

这是从头开始的演练,以实现上述工作:

安装金字塔:

pip install pyramid

创建金字塔项目:

pcreate -t starter myproject

为您的项目设置环境:

cd myproject
python setup.py develop

将myproject / views.py替换为:

from pyramid.view import view_config

@view_config(route_name="home",renderer='templates/ui.pt')
def my_view(request):
    myvar=request.params.get('command',None)
    return {'myvar': myvar }

添加myproject / templates / ui.pt文件:

<!doctype html>
<html>
<body>
<form method="POST"><input type="text" name="command"/>
<input type="submit" name="go" value="submit"/></form>
<div tal:condition="myvar">
   You entered <tal:block tal:content="myvar"></tal:block>
</div>
</body>
</html>

启动你的应用:

pserve --reload development.ini

访问您的金字塔网站:

http://localhost:6543

答案 1 :(得分:0)

初学者开始学习金字塔的最佳位置来自其文档,特别是Quick Tutorial

快速教程逐步介绍了面向Web表单的主题。