我正在制作自定义模板标记,我希望能够以任何类型的值传递它。用例是这样的:
{% include_with_args "path_to_template.html" simple_var an_object.foo.bar "A String" %}
在评估我的自定义模板代码时,我想评估simple_var
,an_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"]
。
简单来说:我想要将表达式计算为值。如何从自定义模板中执行此操作?
答案 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代码中执行此操作。