2014-09-26 79 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 
相关问题