Получение имени шаблона в шаблоне django - PullRequest
5 голосов
/ 13 мая 2009

В целях отладки я хотел бы иметь переменную во всех моих шаблонах, содержащую путь к отображаемому шаблону. Например, если представление отображает шаблоны / account / logout.html, я бы хотел, чтобы {{template_name}} содержал строку templates / account / logout.html.

Я не хочу идти и менять какие-либо представления (особенно потому, что я многократно использую много приложений), так что путь, по-видимому, - это контекстный процессор, который что-то анализирует. Вопрос в том, что для интроспекции.

Или, может быть, это встроено, и я не знаю об этом?

Ответы [ 2 ]

9 голосов
/ 14 мая 2009

Простой способ:

Загрузите и используйте панель инструментов отладки django . Вы получите приблизительную оценку того, что вам нужно, и еще кучу.

Менее простой способ:

Замените Template.render на django.test.utils.instrumented_test_render, прослушайте сигнал django.test.signals.template_rendered и добавьте имя шаблона в контекст. Обратите внимание, что TEMPLATE_DEBUG должно быть истинным в вашем файле настроек, иначе не будет источника, из которого можно получить имя.

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)
2 голосов
/ 13 мая 2009

Шаблоны - это просто строки, а не имена файлов. Вероятно, ваш лучший вариант - обезьяна заплатить render_to_response и / или direct_to_template и скопировать имя файла arg в контекст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...