将单独的self.request.sessions合并为一个请求

时间:2015-05-23 13:46:05

标签: python django python-2.7

我正在尝试优化和减少我的一些代码,并且通常更好地理解它,因为这是我的第一个开发项目。

以下工作正常,但可以简化吗?

self.request.session['path_one_images'] = PATH_ONE_IMAGES                   
self.request.session['images'] = images
self.request.session['slider_DV_values'] = slider_DV_values
self.request.session['instruction_task_one_images'] = INSTRUCTION_TASK_ONE_IMAGES
self.request.session['instruction_task_two_images'] = INSTRUCTION_TASK_TWO_IMAGES

我尝试使用dict将单独的请求组合在一起但得到错误:

  

异常值:不可用类型:'list'

self.request.session({['path_one_images'] : PATH_ONE_IMAGES,                   
                      ['images'] : images,
                      ['slider_DV_values'] : slider_DV_values,
                      ['instruction_task_one_images'] : INSTRUCTION_TASK_ONE_IMAGES,
                      ['instruction_task_two_images'] : INSTRUCTION_TASK_TWO_IMAGES,})

2 个答案:

答案 0 :(得分:2)

request.session基本上是一个Python映射,就像字典一样,它支持所有字典方法。与dict.update()类似,可以设置多个键值对:

self.request.session.update({
    'path_one_images': PATH_ONE_IMAGES,                   
    'images': images,
    'slider_DV_values': slider_DV_values,
    'instruction_task_one_images': INSTRUCTION_TASK_ONE_IMAGES,
    'instruction_task_two_images': INSTRUCTION_TASK_TWO_IMAGES
})

请注意,键是不是列表;您对此处的object[...]订阅语法感到困惑。

答案 1 :(得分:1)

你知道这是dict的错误语法,是吗? {['path_one_images'] : PATH_ONE_IMAGES}

......应该是 {'path_one_images': PATH_ONE_IMAGES, etc}

https://docs.python.org/2/library/stdtypes.html#dict

这解释了您收到的错误("不可用的类型:' list'")... Python认为您正在尝试使用列表{ {1}}作为dict键。 Dict键不必是字符串,但它们必须是 hashable 。在这种情况下,您只想使用字符串['path_one_images']

然后另外,正如@Martijn Pieters指出的那样,会话本身是不可调用的,你应该使用'path_one_images'方法,例如:

update