【发布时间】:2010-12-23 00:49:20
【问题描述】:
我希望能够从文件中实例化模板(大概使用 django.template.loader.get_template(filename) ),然后确定应该在传递的任何上下文中定义的变量集.
我以为 Template 对象上会有一个方法,但似乎没有。
我阅读了文档,发现最接近的是:
http://docs.djangoproject.com/en/1.0/topics/templates/#using-the-built-in-reference
建议进入管理界面查看与给定视图关联的所有变量。
我不想通过管理界面,因为我想以编程方式执行此操作——我正在尝试编写测试。
我使用的是 Django 版本 (1, 0, 2, 'final', 0)
更新:
我尝试了synack的答案,发现(用filter_expression.var替换filter_expression.token,以获取不带标签的变量的实际名称等等)它返回了在模板中本地定义的变量,但是不适用于在其扩展的父级中定义的变量。
例如,假设我在两个文件中有模板:
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
【问题讨论】:
标签: django variables django-templates