django:解析自定义模板中的变量

时间:2012-08-03 00:18:58

标签: python django interpreter django-templates

我正在制作自定义模板标记,我希望能够以任何类型的值传递它。用例是这样的:

{% include_with_args "path_to_template.html" simple_var an_object.foo.bar "A String" %}

在评估我的自定义模板代码时,我想评估simple_varan_object.foo.bar"A String",就像Django通常一样。目前我有

these_args = [context[arg_name] for arg_name in self.arg_names]

但是,这仅适用于变量名称(simple_var)。

如何让我的模板像Django一样评估这些字符串?也就是说,如果.foo是一个返回带有"bar"键的字典的函数,它应该按预期评估它:an_object.foo()["bar"]

简单来说:我想要将表达式计算为值。如何从自定义模板中执行此操作?

2 个答案:

答案 0 :(得分:2)

实际上非常简单。而不是:

these_args = [context[arg_name] for arg_name in self.arg_names]

做的:

these_args = [template.Variable(arg_name).resolve(context) for arg_name in self.arg_names]

当然,现在arg_name是用词不当,所以我改变了,但只是用这种方式来解释这些差异。

答案 1 :(得分:0)

包含代码已经执行了您想要的操作:https://docs.djangoproject.com/en/1.4/howto/custom-template-tags/#inclusion-tags

你唯一需要做的就是改变调用an_object.foo.bar的地方。而不是在模板层的标签的args中执行此操作,而是在标记的Python代码中执行此操作。