gpt4 book ai didi

python - request.params 中的关键错误

转载 作者:太空宇宙 更新时间:2023-11-04 10:28:55 24 4
gpt4 key购买 nike

我是 Python 的初学者,我必须创建一个 Pyramid 项目,它接受来自的用户输入,并执行一个简单的操作,将结果返回给用户。这是我的 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:'command'

请帮忙。

最佳答案

如果您的请求中没有传递任何参数(如果您访问该页面而没有发布或向查询字符串添加参数 -- http://mypage/my_view?command=something 就会发生这种情况),那么 request.params MultiDict 将不会其中有一个名为“command”的键,这就是您的错误来源。您可以明确检查您的请求中是否包含“命令”。参数:

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

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

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

此外,由于您正在为 View 定义模板,通常,您的返回值会为该模板提供上下文。但是,您的代码实际上并未使用模板,而是直接返回响应。你通常不会那样做。你会做更像这样的事情:

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

下面是从头开始的演练,以实现上述功能:

安装 Pyramid :

pip install pyramid

创建您的 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

访问您的 Pyramid 网站:

http://localhost:6543

关于python - request.params 中的关键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28059606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com