Python / Django:将值分配给列表的问题

时间:2014-10-06 18:55:23

标签: django python-2.7

我正在尝试将random.choice(PATH_ONE_IMAGES)的输出分配给列表,然后将其从PATH_ONE_IMAGES中删除,以便无法再选择它。然后,这意味着通过get_context_data方法将其与其他变量一起返回给用户,该方法是Djangos SesionWizardView的一部分。

我不认为我正在尝试的是那么难,但我遇到了一些问题。

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获取image的值。然后,当用户到达步骤8时,然后再次显示所有三个图像。我希望这能解释我正在做的事情。

我的所有句子似乎都在行

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]

使用insert或append会导致context['first_image'] = images[0]

出现相同的错误
  

异常值:列表索引超出范围

1 个答案:

答案 0 :(得分:1)

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

语法不正确

append()insert()是函数。像这样使用它们(用括号代替括号):

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