2014-03-12 4 views
0

내 변수 messages_outbox파이썬 : 지역 변수는 할당하기 전에 참조

@view_config(route_name="dashboard", request_method='GET') 
def home(self, is_desktop=True): 
    callback = self.session["bounce"] 
    if callback is not None: 
     self.session["bounce"] = None 
     return self.redirect(callback) 

    mak = Dashboard.DesktopHomeMak 

    member = self.member 

    dict = {} 
    # self.cls.append_preview(member=member, dict=dict) 
    state = member.state 

    messages_outbox = self.ctx.messaging.outbox 
    messages_outbox = messages_outbox[:3] if len(messages_outbox) > 3 else messages_outbox 
    messages_outbox_total = len(messages_outbox) 

    messages_inbox = self.ctx.messaging.inbox 
    messages_inbox = messages_inbox[:3] if len(messages_inbox) > 3 else messages_inbox 
    messages_inbox_total = len([m for m in messages_inbox]) 

    dict['messages_outbox'] = messages_outbox 
    dict['messages_outbox_total'] = messages_outbox_total 

    dict['messages_inbox'] = messages_inbox 
    dict['messages_inbox_total'] = messages_inbox_total 

    newbie = self.ctx.session.newbie 
    profile = self.member.profile 
    profile = profile.deflate() 
    profile["avatar"] = self.avatar_uri_large 
    dict['profile'] = profile 
    dict['newbie'] = newbie 
    dict['verified'] = None 
    dict['member'] = member 

    if newbie is True: 
     session = self.ctx.session 
     try: 
      state = session.state 
      state.pop("newbie") 
     except: 
      pass 

     try: 
      session.save_state() 
     except: 
      pass 

    ## if the member has not verified their email address, let them know 
    if self.member.is_verified is False: 
     dict['verified'] = False 
    else: 
     dict['verified'] = True 

    print dict['messages_outbox'] 
    print messages_outbox 

    return self.render(mak, value=dict, messages_outbox=messages_outbox, messages_inbox=messages_inbox) 

MAK의 파일 (base.mak)을 정의하는 내 정의의 부분은 내가이 오류 여기

을 받고있는 이유 확실하지

%if messages_outbox: 
    % for messages_outbox in messages_outbox: 
     % if messages_outbox["type"] == "Introduction": 
      ${makerow_outbox(messages_outbox)} 
     % endif 
    % endfor 

    <thead> 
     <tr> 
      <td colspan="6"> 
       <p class="message">You don’t have any active requests. To make a request use the <a href="#" class="search-highlight">search field</a></p> 
      </td> 
     </tr> 
    </thead> 
%endif 

내가 underst하지 않습니다 무엇 : 그 아래의 코드는 (첫 번째 줄에) 오류를 던지고있다가 포함 된 다른 템플릿 파일 (home.mak)에 끌어 템플릿입니다 템플릿을 렌더링하기 전에 분명히 messages_outbox이 정의되어 있습니다. 왜이 오류가 발생합니까?


전체 역 추적 : 당신이 messages_outbox 마스크하지 않도록

Traceback (most recent call last): 
File "/Applications/MAMP/htdocs/WhoAt/env/lib/python2.7/site-packages/pyramid-1.4.2-py2.7.egg/pyramid/mako_templating.py", line 232, in __call__ 
result = template.render_unicode(**system) 
File "/Applications/MAMP/htdocs/WhoAt/env/lib/python2.7/site-packages/Mako-0.8.1-py2.7.egg/mako/template.py", line 452, in render_unicode 
as_unicode=True) 
File "/Applications/MAMP/htdocs/WhoAt/env/lib/python2.7/site-packages/Mako-0.8.1-py2.7.egg/mako/runtime.py", line 783, in _render 
**_kwargs_for_callable(callable_, data)) 
File "/Applications/MAMP/htdocs/WhoAt/env/lib/python2.7/site-packages/Mako-0.8.1-py2.7.egg/mako/runtime.py", line 815, in _render_context 
_exec_template(inherit, lclcontext, args=args, kwargs=kwargs) 
File "/Applications/MAMP/htdocs/WhoAt/env/lib/python2.7/site-packages/Mako-0.8.1-py2.7.egg/mako/runtime.py", line 841, in _exec_template 
callable_(context, *args, **kwargs) 
File "/Applications/MAMP/htdocs/WhoAt/env/www/www/templates/index/desktop/base_dashboard.mak", line 647, in render_body 
${next.body()} 
File "/Applications/MAMP/htdocs/WhoAt/env/www/www/templates/index/desktop/home.mak", line 81, in render_body 
%if messages_outbox: 
UnboundLocalError: local variable 'messages_outbox' referenced before assignment 
+1

'dict'은 어디에 정의되어 있습니까? 그것이 식별자이기 때문에 그것을 식별자로 사용하는 것은 좋은 생각이 아닙니다. 또한 messages_outbox가 아직 정의되지 않았다는 불만을 표시하는 행은 무엇입니까? – munk

+0

실제 추적 표시. – geoffspear

+3

'messages_outbox의 messages_outbox '- 본질적으로 지역 변수를 재정의하고 있으므로 여기에 오류가있을 수 있습니다. 'messages_outbox에서 보낼 편지함'으로 변경하고 – J0HN

답변

1

당신은 home.mak 변경해야는 :

%if messages_outbox: 
    % for outbox in messages_outbox: 
     % if outbox["type"] == "Introduction": 
      ${makerow_outbox(outbox)} 
     ... 

또한,이 끔찍한 : dict = {}. 파이썬 내장 함수를 참조하는 이름을 사용하면 안됩니다. 그것은 나중에 당신에게 많은 좌절을 일으킬 것입니다. 어쩌면 이름을 outbox_dict로 변경하십시오.