Python列表追加元素重复添加
我刚开始学习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(r'^adminupload$', front.adminUpload.as_view() ),
但不知为什么,每次我重新加载页面时,我的 context['js_paths']
列表都会多一个项目,内容是 '/static/path/to/js/file.js'
。也就是说,如果我重新加载页面5次,这个列表就会包含5个项目,都是这个值。我确认这个方法每次请求只被调用一次,而且通过我设置的调试日志可以看到,列表确实在每次请求后变得更大。
我一定是漏掉了什么很简单的东西,可能是某种缓存,或者对模板上下文的理解不够。任何指点都会非常感谢。
1 个回答
3
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']
都在不断地被添加内容。
你可以考虑这样做:
context['js_paths'] = webapp.settings.template['js_paths'] + ['/static/path/to/js/file.js']