金字塔“选择”表单输入引发KeyError

时间:2012-12-10 15:15:25

标签: python pyramid html-select mako

我正在尝试访问Pyramid应用程序中的request.param

我看到了一个关于复选框的主题,但没有人谈论“选择”HTML标记。

在金字塔视图一侧,这是我的代码中收集参数的部分:

if 'form.submitted' in request.params: # user
    user = User(request.params['nickname'],
                request.params['lastname'],
                request.params['firstname'],
                request.params['email'],
                request.params['password'],
                request.params['profile'])

在Mako模板方面,我的表单是一个简单的HTML语句:

<select name="profile">
    % for profile in p:
        % if profile is u.profile:
            <option selected>${profile.name}</option>
        % else:
            <option>${profile.name}</option>
        % endif
    % endfor
</select>  

每当我尝试访问'profile'参数时,我都会遇到KeyError...例外。

任何人都可以帮我解决这个问题吗?


更新:今天早上我无法得到KeyError Mako投掷......也许我的同事解决了这个问题,我需要检查最后的提交。现在用户被创建了一个好方法,但是当我将应用程序用户重定向到相同的表单(带有验证消息)时,我无法在语句中显示好处。很抱歉给您带来不便......

3 个答案:

答案 0 :(得分:1)

我不确定,但是profile参数可以是unicode而不是str。但如果它只发生在“个人资料”而不是其他人,我不确定。

答案 1 :(得分:1)

如果没有看到从视图返回的确切内容,很难确定,但如果在mako中抛出了一个键错误,通常意味着您没有从视图中返回该参数。例如:

@view_config(route_name='myform', renderer='myform.mako')
def myform(request):
   if request.POST:
       # do stuff with submitted form ...       
   user ={'name': 'bob'}
   return {'user': user}

在myform.mako中,您可以访问user.name,但如果您尝试访问user.profile,则会引发密钥错误。

答案 2 :(得分:0)

好吧,问题在我之前的一位同事的提交中得到纠正,现在我无法得到KeyError ...感谢您的帮助!