首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError:“未定义”对象是不可迭代的?

TypeError:“未定义”对象是不可迭代的?
EN

Stack Overflow用户
提问于 2013-10-01 06:09:58
回答 1查看 9.8K关注 0票数 1

下面是我创建的mako模板

代码语言:javascript
运行
复制
<%inherit file="/openerp/controllers/templates/base_dispatch.mako"/>
<%def name="header()">
    <title>${_("Otp")}</title>
    <script type="text/javascript">alert("OTP PAGE");</script>
</%def>
<%def name="content()">
    <table width="100%">
        <tr><%include file="header.mako"/></tr>
    </table>
    </br>
    <table class="view" cellpadding="0" cellspacing="0" style="padding-top: 10px; border:none;" align="center">
        <tr>
            <td style="padding:35px 10px 5px 35px; width="450"  align="center">
                <form action="${py.url(target)}" method="post" name="otpform" id="otpform" style="padding-bottom: 5px; min-width: 100px;">
                    % for key, value in origArgs.items():
                        <input type="hidden" name="${key}" value="${value}"/>
                    % endfor
                   <input name="otp_action" value="otp" type="hidden"/>
                   <fieldset class="box" style="width:300px">
                        <legend style="padding: 4px;">
                            <img src="/openerp/static/images/stock/stock_person.png" alt=""/>
                        </legend>
                        <div class="box2" style="padding: 5px 5px 20px 5px">
                            <b>Please enter SMS code</b>
                            <table width="" cellspacing="2px" cellpadding="0" style="border:none;">

                                <tr>
                                    <td class="label"><label for="otp">${_("Otp:")}</label></td>
                                    <td style="padding: 3px;"><input type="text" id="otp" name="otp" class="db_user_pass" value="${otp}" autofocus="true"/></td>
                                </tr>
                                <tr>
                                    <td></td>
                                    <td class="db_login_buttons">
                                        <button type="submit" class="static_boxes">${_("Otp")}</button>
                                    </td>
                                </tr>
                            </table>
                        </div>
                    </fieldset>
                </form>

            </td>
        </tr>
    </table>

    <%include file="footer.mako"/>
</%def>

模板的python文件是

代码语言:javascript
运行
复制
import re
from openobject.controllers import BaseController
import cherrypy
from openerp.utils import rpc
from mako.lookup import TemplateLookup
from mako.template import Template
from openobject import tools
import openobject
from openobject.tools import expose, url, redirect, validate, error_handler
import formencode
import base64
import time

class OTP(BaseController):

    _cp_path = "/openerp/otp"
    msg = {
           }

    def __init__(self, *args, **kwargs):
        super(OTP, self).__init__(*args, **kwargs)
        self._msg = {}

    @expose()
    def index(self, *args, **kw):
        print '>>>>>>>>>>>>>>>>>>>>>>>INDEX<<<<<<<<<<<<<<<<<<<<<<<<<<'
        self.msg = {}
        target='/'
        url='socket://localhost:8070'
        action='otp'
        info=''
        info = None
        message=''
        origArgs=self.get_orig_args(kw)
        self.otp_check(target, action, message, origArgs)

    @expose(template="/openerp/controllers/templates/otp.mako")
    def otp_check(self, target, action=None, message=None, origArgs={}):
        print '>>>>>>>>>>>>>>>>>>>>>>>otp_check<<<<<<<<<<<<<<<<<<<<<<<<<<'
        target='/'
        url='socket://localhost:8070'
        action='otp'
        info=''
        info = None
        return dict(target=target, url=url, action=action, message=message, origArgs=origArgs, info=info)

    def get_orig_args(self,kw):
        if not kw.get('otp_action'):
            return kw

        new_kw = kw.copy()
        clear_login_fields(new_kw)
        return new_kw

# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

但是在运行它时,我会在浏览器中得到以下错误。

代码语言:javascript
运行
复制
500 Internal Server Error

The server encountered an unexpected condition which prevented it from fulfilling the request.

Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.6/cherrypy/_cprequest.py", line 606, in respond
    cherrypy.response.body = self.handler()
  File "/usr/lib/pymodules/python2.6/cherrypy/_cpdispatch.py", line 25, in __call__
    return self.callable(*self.args, **self.kwargs)
  File "/home/zbeanz/workspace/Sms_authentication/openerp-web-6.0.4/openobject/tools/_expose.py", line 182, in func_wrapper
    res = func(*args, **kw)
  File "/home/zbeanz/workspace/Sms_authentication/openerp-web-6.0.4/openobject/controllers/_root.py", line 90, in default
    return request.handler()
  File "/usr/lib/pymodules/python2.6/cherrypy/_cpdispatch.py", line 25, in __call__
    return self.callable(*self.args, **self.kwargs)
  File "/home/zbeanz/workspace/Sms_authentication/openerp-web-6.0.4/openobject/tools/_expose.py", line 182, in func_wrapper
    res = func(*args, **kw)
  File "/home/zbeanz/workspace/Sms_authentication/openerp-web-6.0.4/addons/openerp/controllers/otp.py", line 83, in index
    self.otp_check(target, action, message, origArgs)
  File "/home/zbeanz/workspace/Sms_authentication/openerp-web-6.0.4/openobject/tools/_expose.py", line 222, in func_wrapper
    return render_template(_template, res).encode("utf-8")
  File "/home/zbeanz/workspace/Sms_authentication/openerp-web-6.0.4/openobject/tools/_expose.py", line 141, in render_template
    return utils.NoEscape(template.render_unicode(**kw))
  File "/usr/lib/pymodules/python2.6/mako/template.py", line 138, in render_unicode
    return runtime._render(self, self.callable_, args, data, as_unicode=True)
  File "/usr/lib/pymodules/python2.6/mako/runtime.py", line 364, in _render
    _render_context(template, callable_, context, *args, **_kwargs_for_callable(callable_, data))
  File "/usr/lib/pymodules/python2.6/mako/runtime.py", line 381, in _render_context
    _exec_template(inherit, lclcontext, args=args, kwargs=kwargs)
  File "/usr/lib/pymodules/python2.6/mako/runtime.py", line 414, in _exec_template
    callable_(context, *args, **kwargs)
  File "_openobject_controllers_templates_base_mako", line 61, in render_body
  File "/usr/lib/pymodules/python2.6/mako/runtime.py", line 255, in <lambda>
    return lambda *args, **kwargs:callable_(self.context, *args, **kwargs)
  File "_openerp_controllers_templates_otp_mako", line 89, in render_content
TypeError: 'Undefined' object is not iterable

是什么导致了这个错误?

EN

回答 1

Stack Overflow用户

发布于 2013-10-03 17:25:15

错误描述非常清楚。

代码语言:javascript
运行
复制
'Undefined' object is not iterable

也就是说,您有一个list对象,并尝试在mako文件中进行迭代。但是在运行时,对象不被赋值。所以这个对象是未定义的。在您的例子中,您只迭代一个变量。

代码语言:javascript
运行
复制
% for key, value in origArgs.items():
     <input type="hidden" name="${key}" value="${value}"/>
% endfor

检查变量origArgs在运行时是否有值。处理这类异常是很好的,如下所示

代码语言:javascript
运行
复制
%if origArgs:
    % for key, value in origArgs.items():
       <input type="hidden" name="${key}" value="${value}"/>
    % endfor
 %endif

如果这不是导致错误的原因,那么检查文件"/openerp/controllers/templates/base_dispatch.mako".中的可迭代性你一定能拿到。如果仍然没有运气,请在下面留下评论。干杯!!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19109160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档