小编Vic*_*ler的帖子

查询模板以获取所需的变量?

我希望能够从文件中实例化一个模板(大概使用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%}
Run Code Online (Sandbox Code Playgroud)

toychild.html:

{% extends "toyparent.html" %}

{%block base_results%}
    {{block.super}}
    I {{verb}} it.
{%endblock base_results %}
Run Code Online (Sandbox Code Playgroud)

我加载子模板:

>>> toy=django.template.loader.get_template('toychild.html')
Run Code Online (Sandbox Code Playgroud)

这正确呈现:

>>> toy.render(django.template.Context(dict(adjective='cool',verb='heart')))
u'\n    \nDjango is cool\n\n    I heart it.\n\n'
Run Code Online (Sandbox Code Playgroud)

但我无法从中得到两个变量:

>>> v=toy.nodelist.get_nodes_by_type(VariableNode)
>>> for k in v: print k.filter_expression.var
...
block.super
verb
Run Code Online (Sandbox Code Playgroud)

django variables django-templates

12
推荐指数
1
解决办法
1167
查看次数

标签 统计

django ×1

django-templates ×1

variables ×1