Python列表追加添加元素两次

时间:2014-07-09 20:51:59

标签: python django

我是Python的新手,正在尝试使用Django。我在页面请求期间看到了什么对我来说是一种奇怪的行为。我编写了自己的类,扩展了内置的TemplateView类,以便我可以覆盖该类的get_context_data方法。在我的新版本的方法中,我正在对context进行更改,如下所示:

class adminUpload(TemplateView):
  template_name = "adminupload.tpl.html"

  def get_context_data(self,**kwargs):
    context = super(TemplateView, self).get_context_data(**kwargs)

    context['js_paths'] = webapp.settings.template['js_paths']

    logger.debug('adding')
    logger.debug( context['js_paths'] )

    context['js_paths'].append( '/static/path/to/js/file.js' )

    logger.debug( context['js_paths'] )

    return context

在我的url路由器中,我将请求传递给这个类:

url(r'^adminupload$', front.adminUpload.as_view() ),

出于某种原因,每次重新加载页面时,我的context['js_paths']列表都会延长一个项'/static/path/to/js/file.js',这样如果我重新加载页面5次,列表将包含5个项目到那个价值的最后。我可以验证每个请求只调用一次该方法,并且通过检查我设置的调试日志,列表确实在每次请求后变得更大。

我必须遗漏一些非常简单的东西,某种缓存,而不是对模板上下文的理解。任何指向正确方向的人都会非常感激。

1 个答案:

答案 0 :(得分:2)

context['js_paths'] = webapp.settings.template['js_paths']
context['js_paths'].append( '/static/path/to/js/file.js' )

为同一列表创建新标识符,然后附加到该列表。你没有复制清单。

因此,每次调用get_context_data webapp.settings.template['js_paths']时都会附加到。{/ p>

你可以做的是:

context['js_paths'] = webapp.settings.template['js_paths'] + ['/static/path/to/js/file.js']