2009-05-13 4 views
4

디버깅 목적으로 렌더링 할 템플릿의 경로를 보유하고있는 모든 템플릿에서 변수를 갖고 싶습니다. 예를 들어보기에서 templates/account/logout.html을 렌더링하면 {{template_name}}에 templates/account/logout.html 문자열을 포함하고 싶습니다.django 템플릿에서 템플릿 이름 얻기

(특히 많은 앱을 재사용하고 있기 때문에)보기를 바꾸고 싶지는 않습니다. 따라서가는 방법은 뭔가를 관조하는 컨텍스트 프로세서 인 것 같습니다. 문제는 내성적 인 것입니다.

아니면 이건 내장되어 있고 그것에 대해 모르겠습니까?

답변

8

쉬운 방법 :

다운로드 및 django debug toolbar를 사용합니다. 당신은 당신이 겪고있는 것과 나중에 더 많은 것을 대략적으로 알게 될 것입니다.

덜 쉬운 방법 :

django.test.utils.instrumented_test_renderTemplate.render를 교체 django.test.signals.template_rendered 신호를 수신하고, 상황에 템플릿의 이름을 추가합니다. TEMPLATE_DEBUG은 설정 파일에서 true 여야하며 그렇지 않으면 이름을 가져올 원본이 없습니다.

if settings.DEBUG and settings.TEMPLATE_DEBUG 

    from django.test.utils import instrumented_test_render 
    from django.test.signals import template_rendered 


    def add_template_name_to_context(self, sender, **kwargs) 
     template = kwargs['template'] 
     if template.origin and template.origin.name 
      kwargs['context']['template_name'] = template.origin.name 

    Template.render = instrumented_test_render 

    template_rendered.connect(add_template_name_to_context) 
+0

이 코드는 어디에 복사해야합니까? 어떤 파일? – Kostyantyn

1

템플릿은 파일 이름이 아닌 문자열입니다. 아마도 최선의 선택은 원숭이 패치 render_to_response 및/또는 direct_to_template이며 파일 이름 arg를 컨텍스트에 복사하는 것입니다.

관련 문제