我是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;
请帮忙。
答案 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表单的主题。