我是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个项目到那个价值的最后。我可以验证每个请求只调用一次该方法,并且通过检查我设置的调试日志,列表确实在每次请求后变得更大。
我必须遗漏一些非常简单的东西,某种缓存,而不是对模板上下文的理解。任何指向正确方向的人都会非常感激。
答案 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']