2012-08-03 47 views
1

我正在製作一個自定義模板標記,並且希望能夠以任何類型的值傳遞它。用例是這樣的:django:解決自定義模板中的變量

{% 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

這可能是我接受我試圖在模板中放置太多邏輯,然後回到視圖來嘗試解決爲什麼在那裏無法完成的問題。 – 2012-08-03 00:28:15

+0

我有一個像'{'Category1':{'Subcat1':obj,'Subcat2':obj},'Category2':{'Subcat1':obj,'Subcat4':obj}}'的屬性我傳遞給模板的對象。每個「obj」都使用另一個模板呈現。所以我想做'{%include_with_args「obj_renderer.html」object.Category1.Subcat1%}','{%include_with_args「obj_renderer.html」object.Category2.Subcat4%}等等...什麼是更好的方法? – Claudiu 2012-08-03 02:06:43

回答

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是用詞不當,所以我改變了這一切,但只是寫這樣闡明的差異。