gpt4 book ai didi

python - 如何在 Django SessionWizardView 中重新初始化 session 变量

转载 作者:太空宇宙 更新时间:2023-11-03 15:09:10 25 4
gpt4 key购买 nike

我正在使用 Djago SessionWizardView将调查应用程序划分为多个页面。下面的代码旨在从 PATH_ONE_IMAGES 中随机选择一张图像。在每个步骤上列出,将其显示给用户,然后将其从列表中删除,这样就无法再次选择它,直到所有图像都消失为止。

这工作正常,但是当我在同一个浏览器中重新访问调查时 PATH_ONE_IMAGES尽管我在开始时重新初始化它,但它仍然是空的。如果我删除浏览器历史记录或者每次使用不同的浏览器,它都可以正常工作,但是当我使用相同的浏览器重新访问应用程序时,我会不断收到以下错误。

IndexError at /surveyone/

list index out of range

我只是在学习如何使用 session 变量,但我认为通过重新初始化 PATH_ONE_IMAGES就像我在 SessionWizardView 的顶部所做的那样包含所有 9 个 jpg每次都会“重新填充”该列表。

PATH_ONE_IMAGES = self.request.session.get('path_one_images', ['P1D1.jpg', 'P2D2.jpg', 'P3D3.jpg', 'P4D4.jpg', 'P5D5.jpg', 'P6D6.jpg', 'P7D7.jpg', 'P8D8.jpg', 'P9D9.jpg']) 

这不对吗?

从下面的调试脚本中,我可以看到第一次使用“全新”浏览器访问应用程序时 PATH_ONE_IMAGES里面存放了 9 件元素。

logger.debug('\n\nThis is the available list of PATH_ONE_IMAGES in 5: %s', PATH_ONE_IMAGES)

然后我选择其中一个 PATH_ONE_IMAGES随机地,将其显示给用户,然后将其从列表中删除。

first_image = random.choice(PATH_ONE_IMAGES)   
PATH_ONE_IMAGES.remove(first_image)
context['display_image'] = first_image

我的问题是,当我使用同一个浏览器第二次访问时,列表是空的,即使我在顶部重新初始化它也是如此。

问题:如何重新填充我的 PATH_ONE_IMAGES每次用户重新访问应用程序时都列出,即使使用相同的浏览器?

如果我使用了错误的术语,我深表歉意,希望您能理解我的意思。

注意:我需要存储PATH_ONE_IMAGES作为 session 变量由于 an issue I had previously with using Global variables and Multi-threaded processing .

我的代码

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

PATH_ONE_IMAGES = self.request.session.get('path_one_images', ['P1D1.jpg', 'P2D2.jpg', 'P3D3.jpg', 'P4D4.jpg', 'P5D5.jpg', 'P6D6.jpg', 'P7D7.jpg', 'P8D8.jpg', 'P9D9.jpg'])
images = self.request.session.get('images', [])
slider_DV_values = self.request.session.get('slider_DV_values', [])

if step in range (5, 19):
self.request.session['path_one_images'] = PATH_ONE_IMAGES

self.request.session['images'] = images
self.request.session['slider_DV_values'] = slider_DV_values

if step == 5:
logger.debug('\n\nThis is the available list of PATH_ONE_IMAGES in 5: %s', PATH_ONE_IMAGES)

first_image = random.choice(PATH_ONE_IMAGES)
PATH_ONE_IMAGES.remove(first_image)
context['display_image'] = first_image
images.insert(0, first_image)
self.request.session['first_image'] = images[0]
self.request.session.get('first_image')


elif step == 6:
logger.debug('\n\nThis is the available list of PATH_ONE_Images in 6: %s', PATH_ONE_IMAGES)

second_image = random.choice(PATH_ONE_IMAGES)
PATH_ONE_IMAGES.remove(second_image)
context['display_image'] = second_image
images.insert(1, second_image)
self.request.session['second_image'] = images[1]
self.request.session.get('second_image')
....
....

任何帮助,一如既往,非常感谢

最佳答案

您应该仅在向导的第一步初始化您的变量 path_one_images:

....

step = int(self.steps.current)
if step == 0:
self.request.session['path_one_images'] = ['P1D1.jpg', 'P2D2.jpg', 'P3D3.jpg', 'P4D4.jpg', 'P5D5.jpg', 'P6D6.jpg', 'P7D7.jpg', 'P8D8.jpg', 'P9D9.jpg']

PATH_ONE_IMAGES = self.request.session.get('path_one_images', [])
images = self.request.session.get('images', [])
slider_DV_values = self.request.session.get('slider_DV_values', [])

if step in range (5, 19):
# You don't need to reinit here your session variable
# self.request.session['path_one_images'] = PATH_ONE_IMAGES

....

也许您需要对 imagesslider_DV_values 变量采用相同的方法。

关于python - 如何在 Django SessionWizardView 中重新初始化 session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29267725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com