我正在尝试将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]
异常值:列表索引超出范围
答案 0 :(得分:1)
images.append[step - 5] = image
images.insert[step - 5] = image
语法不正确。
append()
和insert()
是函数。像这样使用它们(用括号代替括号):
images.append(image)
images.insert(step - 5, image)