2013-10-01 61 views
1

下面是我創建TypeError:'未定義'對象不可迭代?

<%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文件是

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: 

但在運行它,我得到的瀏覽器下面的錯誤。

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 

什麼是造成此錯誤的原因?

+0

你能否提供你正在使用以達到指數的網址是什麼? –

回答

2

錯誤說明是很清楚的。

'Undefined' object is not iterable 

即你有一個列表對象,並嘗試迭代你的mako文件。但是在運行時,對象沒有賦值。所以對象是未定義的。在你的情況,你遍歷只有一個變量

% for key, value in origArgs.items(): 
    <input type="hidden" name="${key}" value="${value}"/> 
% endfor 

檢查,如果變量origArgs運行時得到了價值。這是很好的處理這種異常的像下面

%if origArgs: 
    % for key, value in origArgs.items(): 
     <input type="hidden" name="${key}" value="${value}"/> 
    % endfor 
%endif 

如果這不是一個引起錯誤,然後檢查文件「/openerp/controllers/templates/base_dispatch.mako」的iterables。你必須能夠得到它。如果仍然沒有運氣,請在下面留言。乾杯!!

相關問題