2014-10-06 110 views
0

我试图将random.choice(PATH_ONE_IMAGES)的输出分配给列表,然后将其从PATH_ONE_IMAGES中删除,以使其不能再被选中。这意味着通过Djangos SesionWizardView的一部分get_context_data方法将其与其他变量一起返回给用户。Python/Django:将值分配给列表

我不觉得什么,我尝试是很难,但我已经遇到了一些问题。

views.py

PATH_ONE_IMAGES = ['P1D1.jpg', 'P2D2.jpg', 'P3D3.jpg', 'P4D4.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','8','9','10','11','12','13','14','15','16']: 

      images = [] 
      step = int(self.steps.current) 

      if step in (5, 6, 7): 
       images[step - 5] = image = random.choice(PATH_ONE_IMAGES)   
       PATH_ONE_IMAGES.remove(image) 
       context['display_image'] = image 

      elif step == 8: 
       context['first_image'] = images[0] 
       context['second_image'] = images[1] 
       context['third_image'] = images[2] 

      steps = ['5','6','7','9','10','11','13','14','15']    

      context.update({'steps': steps}) 
     return context 

可以在上面看到,当用户获取到步骤5的列表中的图像,在位置0(5-5)被称为图像和取的值random.choice(PATH_ONE_IMAGES)。然后将其从原始列表中删除,并且显示给用户的display_image获取图像的值。然后,当用户到达第8步时,他们再次显示全部三个图像。我希望这解释了我想要做的事情。

我所有的isses的似乎是与线

images[step - 5] = image = random.choice(PATH_ONE_IMAGES)   

在上面的版本我得到的错误

Exception Value: list assignment index out of range 

基于其他的问题,我已经试过

  images.append[step - 5] = image = random.choice(PATH_ONE_IMAGES)   
      images.insert[step - 5] = image = random.choice(PATH_ONE_IMAGES)   

但两者给我的错误

异常值:“builtin_function_or_method”对象不支持 项目分配

有谁知道我做错了吗?

更新 ------------------------------------------- --------------------

 if step in (5, 6, 7):     
      image = random.choice(PATH_ONE_IMAGES) 
      images.insert(step - 5, image)   

      #=============================================================== 
      # image = random.choice(PATH_ONE_IMAGES) 
      # images.append(image)   
      #=============================================================== 


      PATH_ONE_IMAGES.remove(image) 
      context['display_image'] = image 

     elif step == 8: 
      context['first_image'] = images[0] 
      context['second_image'] = images[1] 
      context['third_image'] = images[2] 

无论是使用插入件或在context['first_image'] = images[0]

异常值附加在相同的错误的结果:表索引超出范围

+1

错误消息告诉你到底是什么问题 - 这应该是'images.append(OBJ)'或'images.insert(指数,OBJ) ' - 注意括号,而不是方括号。 – jonrsharpe 2014-10-06 19:01:14

回答

1
images.append[step - 5] = image  
images.insert[step - 5] = image 

在语法上是不正确

append()insert()的功能。他们使用像这样的(与括号而非括号中):

images.append(image)   
images.insert(step - 5, image) 
+0

您好,当我使用这些方法中的任一我得到以下行'上下文[“first_image”] =图像[0]'说之一的错误“异常值:列表索引超出范围”。有任何想法吗? – Deepend 2014-10-06 19:16:56

+0

您确定在context ['first_image'] = images [0]'之前调用'insert()'或append()'吗?因为如果你在你的if子句中放入了'insert()'或者'append()',那么它不会在'context ['first_image'] = images [0]'处被调用=>'你的list'images'仍然会成为一个空的列表。 – Leistungsabfall 2014-10-06 19:21:16

+0

代码与上面的内容完全相同,除了您对如何正确使用'append'和'insert'的建议更改,我使用任何一种方法都会得到相同的错误。当然可以在步骤5,6和7填充列表,并在用户处于步骤9时访问它。 – Deepend 2014-10-06 19:31:00