2011-03-27 122 views
0

我知道有上下文處理器可以做到這一點,但我想在模板標籤中設置全局模板變量。到目前爲止,我試過這個:在模板標籤中設置全局模板變量

class SetNode(template.Node): 
    def __init__(self, key, nodelist): 
     self.key = key 
     self.nodelist = nodelist 

    def render(self, context): 
     value = self.nodelist.render(context) 
     for d in context.dicts: 
      d[self.key] = value 
     return '' 

I.e.迭代所有上下文並設置變量,但它不起作用。任何人都可以解釋如何做到這一點?例如,base.html文件:

{{ my_var }} {# I want to set this variable in child template #} 

{% block content %} 
{% endblock %} 

child.html:

{% extends 'base.html' %} 
{% block content %} 
    {% set my_var %}Hello{% endset %} 
{% endblock %} 

是否有可能呢?

回答

0

這是一個老派但是一個好評:{% expr %}標籤。代碼是不言自明的。

請注意,使用它(可能)會將您的一些業務邏輯移入您的模板中,但有時也可以。

+0

我沒有試過它,但因爲我看到變量將只在它內部可用。但我想爲所有父塊設置變量(上下文)。 – 2011-03-28 08:00:07

+0

@Vladimir Mihailenco:然後查看代碼並對其進行更改,以便它沿着上下文堆棧前進,並將值保存在那裏。但是,我會警告你,通過這樣做,你可能會設置自己(或者跟隨你的人)進行真正的惡意調試會話,因爲你試圖弄清楚這個模板發生了什麼事情變量的值。 – 2011-03-28 13:31:49

+0

我的代碼已經做到了(「走得更遠,上下文堆棧並保存值」),但它不起作用。據我瞭解,當我的標籤被調用時,Django已經呈現父級/超級模板。我想念什麼? – 2011-03-28 16:23:01