2014-09-26 38 views
0

我正在使用get_context_data方法返回SessionWizardView中的變量。但是,當我嘗試返回five_imagesix_image或`seven_image'時,我仍然收到波紋管錯誤。轉讓之前引用Django:在分配之前引用的局部變量'five_image'

局部變量「five_image」

我無法理解的是,每個變量都被清楚地分配一個值,這是我知道的作品,因爲我打印到終端。

我試圖做

我想存儲其顯示在5,6和我的形式在以後頁面上使用的7頁的圖像的名稱。

path_one_images = ['P1D1.jpg', 'P2D2.jpg', 'P3D3.jpg', 'P4D4.jpg', 'P5D5.jpg/', 'P6D6.jpg', 'P7D7.jpg', 'P8D8.jpg', 'P9D9.jpg'] 


class SurveyWizardOne(SessionWizardView):      
    def get_context_data(self, form, **kwargs): 
     context = super(SurveyWizardOne, self).get_context_data(form, **kwargs) 

     if self.steps.current in ['5','6','7','9','10','11','13','14','15']: 
      display_image = random.choice(path_one_images) 

      if self.steps.current == '5': 
       five_image = display_image 

      elif self.steps.current == '6': 
       six_image = display_image 

      elif self.steps.current == '7': 
       seven_image = display_image  

      steps = ['5','6','7','9','10','11','12','13','14','15']    
      context.update({'display_image': display_image, 
          'five_image': five_image, 
          'six_image': six_image, 
          'seven_image': seven_image, 
          'steps': steps 
          })     
      path_one_images.remove(display_image) 

     if self.steps.current in ['8','12','16']: 
      print '\n\n\n\nYou are on step', self.steps.current 

     return context 

任何幫助一如既往,非常appriciated。

+2

您沒有初始化if語句之外的各種局部變量。因此,這個問題 – karthikr 2014-09-26 19:01:55

回答

2

那些if語句是相互排斥的。有絕對沒有辦法他們都可以分配一個值:只有其中一個可以。其他人將是未定義的。

而不是創造這些變量,你會過得更好的背景下,直接分配鍵的:

 if self.steps.current == '5': 
      context['five_image'] = display_image 

     elif self.steps.current == '6': 
      context['six_image'] = display_image 

     elif self.steps.current == '7': 
      context['seven_image'] = display_image 
1

任何時候self.steps.current是不是沒有被平等「5」變five_image 。然後在context.update中嘗試使用不存在的變量。您需要重新編寫邏輯或在if語句之前創建變量。以下將修復錯誤,但我仍然認爲你需要認真對待你的邏輯並做一些重構。

path_one_images = ['P1D1.jpg', 'P2D2.jpg', 'P3D3.jpg', 'P4D4.jpg', 'P5D5.jpg/', 'P6D6.jpg', 'P7D7.jpg', 'P8D8.jpg', 'P9D9.jpg'] 


class SurveyWizardOne(SessionWizardView):      
    def get_context_data(self, form, **kwargs): 
     context = super(SurveyWizardOne, self).get_context_data(form, **kwargs)   
     five_image = None 
     six_image = None 
     seven_image = None 

     if self.steps.current in ['5','6','7','9','10','11','13','14','15']: 
      display_image = random.choice(path_one_images) 
      if self.steps.current == '5': 
       five_image = display_image 

      elif self.steps.current == '6': 
       six_image = display_image 

      elif self.steps.current == '7': 
       seven_image = display_image  

      steps = ['5','6','7','9','10','11','12','13','14','15']    
      context.update({'display_image': display_image, 
          'five_image': five_image, 
          'six_image': six_image, 
          'seven_image': seven_image, 
          'steps': steps 
          })     
      path_one_images.remove(display_image) 

     if self.steps.current in ['8','12','16']: 
      print '\n\n\n\nYou are on step', self.steps.current 

     return context 
相關問題