2

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

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

在评估我的自定义模板代码时,我想以与 Django 通常相同的方式评估simple_varan_object.foo.bar和。"A String"目前我有

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

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

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

简单来说:我想将表达式评估为一个值。如何从自定义模板中做到这一点?

4

2 回答 2

3

其实很简单。代替:

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是用词不当,所以我改变了它,但只是这样写以阐明差异。

于 2012-08-03T02:08:35.953 回答
0

包含标签已经做了你想要的:https ://docs.djangoproject.com/en/1.4/howto/custom-template-tags/#inclusion-tags

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

于 2012-08-03T01:44:24.050 回答