Я хотел бы создать экземпляр шаблона из файла (предположительно, используя django.template.loader.get_template (имя файла)), а затем определить набор переменных, которые должны быть определены в любом контексте, который он передал.
Я думал, что будет существовать метод в объекте Template, но, похоже, этого не происходит.
Я прочитал документы, и ближайший я нашел следующее:
http://docs.djangoproject.com/en/1.0/topics/templates/#using-the-built-in-reference
который предлагает перейти к интерфейсу администратора, чтобы увидеть все переменные, связанные с данным видом.
Я не хочу проходить через интерфейс администратора, потому что хочу сделать это программно - я пытаюсь написать тесты.
Я использую версию Django (1, 0, 2, 'final', 0)
Обновлено:
Я попробовал синхронизировать ответ и обнаружил, что (с заменой filter_expression.token на filter_expression.var, чтобы получить фактическое имя переменной без тегов и т.д.), он возвратил переменные, которые определены локально в шаблоне, но не работает для переменных, которые определены в родительском объекте, который он расширяет.
Так, например, предположим, что у меня есть шаблоны в двух файлах:
toyparent.html:
{%block base_results%}
Django is {{adjective}}
{%endblock base_results%}
toychild.html:
{% extends "toyparent.html" %}
{%block base_results%}
{{block.super}}
I {{verb}} it.
{%endblock base_results %}
И загружаю дочерний шаблон:
>>> toy=django.template.loader.get_template('toychild.html')
Это правильно отображается:
>>> toy.render(django.template.Context(dict(adjective='cool',verb='heart')))
u'\n \nDjango is cool\n\n I heart it.\n\n'
Но я не могу получить из него две переменные:
>>> v=toy.nodelist.get_nodes_by_type(VariableNode)
>>> for k in v: print k.filter_expression.var
...
block.super
verb