2009-05-13 17 views
4

デバッグの目的で、レンダリングされるテンプレートのパスを保持するすべてのテンプレートに変数を持たせたいと思います。たとえば、ビューがtemplate/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をコンテキストにコピーすることです。

関連する問題