如果您的請求中沒有傳遞任何參數(如果您訪問該頁面時未發佈任何參數或將查詢字符串添加到參數字符串 - http://mypage/my_view?command=something),那麼request.params MultiDict將不會有一個名爲'命令'的鍵,它就是你的錯誤來自的地方。你可以明確地檢查「命令」是在你的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
設置環境,爲您的項目:
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 /模板/ ui.pt文件:
cd myproject
python setup.py develop
與更換的myproject/views.py
<!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
我得到你解釋的第一部分。當我嘗試將param添加到我的查詢字符串時,它工作正常。但是當我在我的文本框中輸入內容並點擊提交時,404表示找不到/ my_view。此外,它沒有工作,當我嘗試沒有追加到我的查詢參數。你能告訴我如何通過文本框提交的東西,並打印下來,而不追加我的參數在查詢字符串? – Tania 2015-01-21 06:48:49
我沒有注意到你的表單動作。該操作告訴瀏覽器將表單數據發佈到哪個網址。你希望它發佈到自己,所以完全擺脫這個動作。
我嘗試刪除操作屬性,但仍然沒有得到我在提交時在文本框中鍵入的內容。它只是清除自己。此外,我沒有得到這個頁面,除非我明確地在查詢字符串中的命令參數。 – Tania 2015-01-21 07:22:32