요청 당 한 번만 을 실행해야하는 간단한 사용자 지정 컨텍스트 프로세서를 만들었습니다. 일부 로깅 훅을 넣은 후에는 요청 당 두 번 호출되는 것을 발견했습니다. .요청 당 두 번 호출되는 장고 사용자 지정 컨텍스트 프로세서
워드 프로세서에 누락 된 알려진 "기능"입니까? 상속 트리의 템플릿 수와 관련이 있습니까? 1.03의 버그입니까?
요청 당 한 번만 을 실행해야하는 간단한 사용자 지정 컨텍스트 프로세서를 만들었습니다. 일부 로깅 훅을 넣은 후에는 요청 당 두 번 호출되는 것을 발견했습니다. .요청 당 두 번 호출되는 장고 사용자 지정 컨텍스트 프로세서
워드 프로세서에 누락 된 알려진 "기능"입니까? 상속 트리의 템플릿 수와 관련이 있습니까? 1.03의 버그입니까?
문제점을 파악했습니다. 원래 컨텍스트가 아닌 사전이 리턴되면 컨텍스트 프로세서가 다시 실행되는 것처럼 보입니다. 이유는 모르겠지만 근본적인 코드를 살펴 보지 않았기 때문에 확신 할 수 없지만 원본 컨텍스트를 업데이트하고 문제가 해결되지 않은 상태로 돌아온 후에는 확신 할 수 없습니다. 감사.
오랜 시간이 걸렸지 만 솔루션에 대해 좀 더 설명해 주시겠습니까? :) 고마워요 – fceruti
나는 동일한 문제가 있었지만 문제는 나를 위해 django - 디버그 - 툴바는 모든 컨텍스트 프로세서가 다시 실행되도록하는 자체 RequestContext를 만드는 것 같다. RequestContext는 소스를 grepping하는 동안 찾을 수 없지만 INSTALLED_APPS 및 MIDDLEWARE_CLASSES에서 제거하면 확실히 문제가 해결되었습니다. –
이것은 예상 된 동작이 아닙니다. 컨텍스트 프로세서는 한 번 실행됩니다 each time a RequestContext is instantiated). 템플릿 상속의 경우 the same context instance is passed up to the parent template이므로 컨텍스트 프로세서를 다시 실행해서는 안됩니다. 로깅이 오해의 소지가 있거나 (@Vinay Sajip의 코멘트를 보시오), 각 요청에 대해 추가 RequestContext가 실행되는 코드 위치를 알아야합니다 (삽입 태그 나 템플릿을 렌더링하는 다른 사용자 정의 템플릿 태그를 사용하고 있습니까? RequestContext를 인스턴스화 하시겠습니까?)
EDIT 죄송합니다. "inclusion tag"는 inclusion_tag 데코레이터를 사용하는 태그가 아니라 다른 템플리트를 렌더링하는 일부 태그입니다. 컨텍스트를 취하는 일반적인 inclusion_tag는 새로운 Context를 인스턴스화하지 않고 기존 컨텍스트 개체를 전달해야합니다.
"import pdb; pdb.set_trace()"를 컨텍스트 프로세서에 넣고 Django dev 서버에서 코드를 실행하고 콘솔에서 pdb를 사용하여 스택 추적을 검사 할 때마다 컨텍스트 프로세서가 충돌하여 어디에서 호출되는지 확인합니다.
'context'를 인수로 사용하는 사용자 지정 포함 태그를 사용하고 있습니다. 그것이 예상 된 행동이라고 생각하면? 나는 inclusion 태그가 컨텍스트 프로세서를 다시 실행하게 만들었다는 것을 깨닫지 못했습니다. – meppum
프로덕션 웹 서버, Apache 등에서 발생합니까? 아니면 내장 개발 서버에서 발생합니까? 나는 비슷한 경우를 로컬에서 보았지만 runserver의 단점이라고 확신합니다.
내 경우에는 django
debug_toolbar
을 사용할 때이 버그가 발생합니다. allauth 패키지에서 providers_media_js : 내 경우
문제가 즉 templatetag했다 :
debug_toolbar.middleware.DebugToolbarMiddleware
여기에서 DebugToolbarMiddleware를 주석 처리하여 수정했습니다. –
'debug_toolbar.panels.template.TemplateDebugPanel'을 주석 처리하고 다른 디버그 도구 모음 패널을 가져올 수도 있습니다. 여기 Github 발행 티켓이 있습니다. https://github.com/django-debug-toolbar/django-debug-toolbar/issues/353 – seddonym
희망이 도움이 주석이 시도를 방지합니다.
컨텍스트 프로세서에서 아무 것도 반환하지 않고 문제가 지속되는지 확인하십시오. 그런 다음 어떤 변수가이 문제의 원인인지 알아보십시오.
나는 이것을 더 보았고 각 컨텍스트 프로세서가 템플릿 상속 트리에서 템플릿 당 한 번 실행되는 것 같습니다. base.html과 homepage.html과 같은 두 개의 템플릿이 있습니다. 이것은 실제로 비효율적 인 것처럼 보입니다. 나는 그것이 내 바리의 단순한 감시 일 뿐이라고 기대하고있다. – meppum
나에게 괜찮은 것 같습니다. 두 개의 템플리트가 있고 둘 모두 적절한 컨텍스트가 필요합니다. struts의 인터셉터 스택처럼 들립니다. – Seth
어떤 로깅 훅을 사용 했습니까? 때로는 파이썬의 로깅 패키지를 사용하고 실수로 여러 핸들러를 추가하면 메시지 출력이 두 번 표시됩니다. 해당 이벤트의 시간 소인을 확인하십시오. –