2014-07-09 4 views
1

저는 Python을 처음 사용하고 장고를 시험 중입니다. 나는 페이지 요청 동안 나에게 이상한 행동이 무엇인지보고있다. 나는 내 TemplateView 클래스를 확장 한 클래스를 작성하여 해당 클래스의 get_context_data 메서드를 재정의 할 수 있습니다. 그 방법의 나의 새로운 버전에서는 내가 그렇게 같은 context을 변경하고 있어요 :Python 목록에 요소 추가 두 번 추가

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

'앱의 설정을 참조 webapp.settings' 있습니까? 대신'from django.conf import settings'을 사용해보십시오. –

+0

추가하기 전에'context [ 'js_paths']. append ('/static/path/to/js/file.js')'를 제거하거나리스트에서'/static/path/to/js/file.js'를 확인하십시오. . – furas

답변

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

동일한 목록에 새 식별자를 만든 다음 해당 목록에 추가합니다. 목록을 복사하지 않습니다.

이렇게 매번 get_context_datawebapp.settings.template['js_paths']이라고 붙습니다. 대신 무엇을 할 수 있는지

은 다음과 같습니다

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

고마워,이게 효과가있어, PHP가 나에게 유약을 내놓는 것을 놓치지 않을 것임을 완벽하게 이해할 수있다. 나는 몇 가지 대답을 표시 할 것이다. 나는 아직도 목록이 점점 커지고있는 이유를 이해하지 못합니다. 요청이 끝날 때 이러한 변수가 모두 소멸되지는 않습니까? – oliakaoil

+0

나는'webapp.settings'이 당신이 그것을 실행하는 방법에 상관없이 장고 프로세스의 수명 동안 인스턴스화 된 것으로 생각합니다. – MattH

+0

다시 한 번 감사드립니다. 나는 당신이 뭔가있는 것 같아요. 나는 파일 소켓 연결로 Nginx와 uWSGI를 사용하고있다. 나는이 과정이 실제로 어떻게 작동하는지 조금 더 자세히 읽을 필요가 있다고 생각한다. – oliakaoil