python
  • shell
  • pyramid
  • 2015-01-21 164 views 1 likes 
    1

    我是Python的初學者,我必須創建一個接受來自from的用戶輸入的金字塔項目,並執行將結果返回給用戶的簡單操作。 這是我的views.pyrequest.params中的關鍵錯誤

    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) 
    

    這是我的模板/ 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異常:'命令'

    請幫忙。

    回答

    3

    如果您的請求中沒有傳遞任何參數(如果您訪問該頁面時未發佈任何參數或將查詢字符串添加到參數字符串 - 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 
    
    +0

    我得到你解釋的第一部分。當我嘗試將param添加到我的查詢字符串時,它工作正常。但是當我在我的文本框中輸入內容並點擊提交時,404表示找不到/ my_view。此外,它沒有工作,當我嘗試沒有追加到我的查詢參數。你能告訴我如何通過文本框提交的東西,並打印下來,而不追加我的參數在查詢字符串? – Tania 2015-01-21 06:48:49

    +0

    我沒有注意到你的表單動作。該操作告訴瀏覽器將表單數據發佈到哪個網址。你希望它發佈到自己,所以完全擺脫這個動作。

    clockwatcher 2015-01-21 06:56:18

    +0

    我嘗試刪除操作屬性,但仍然沒有得到我在提交時在文本框中鍵入的內容。它只是清除自己。此外,我沒有得到這個頁面,除非我明確地在查詢字符串中的命令參數。 – Tania 2015-01-21 07:22:32

    0

    最好的地方,適合初學者開始學習金字塔是由它的文檔,特別是Quick Tutorial

    「快速教程」逐步介紹了通向Web表單的主題。

    +0

    嗨史蒂夫!謝謝我通過這個教程,它非常有用。 – Tania 2015-01-21 09:30:29

    相關問題