2011-03-28 39 views
7

我創建了自定義inclusion template tag,它接受單個Update模型對象。從自定義包含模板標記中訪問STATIC_URL

模板標籤:

@register.inclusion_tag('update_line.html') 
def update_line(update): 
    return {'update': update} 

update_line.html

<tr><td class="update">{{ update }}</td><td class="ack"> 
<img id="update-{{ update.pk }}" class="ack-img" src="{{ STATIC_URL }}img/acknowledge.png" alt="Acknowledge" /></td></tr> 

的問題是,{{ STATIC_URL }}是不是在我列入模板標籤模板可用,即使我現在用的是django.core.context_processors.static上下文處理器,因此{{ STATIC_URL }}可用於我的所有'正常'模板沒有通過我處理包含模板標籤。

有沒有一種方法可以從我的包含模板標籤模板中獲取STATIC_URL,而無需執行某些令人討厭的操作,如手動從設置中獲取並將其明確地作爲上下文變量傳遞給它?

回答

14

好的。發佈問題後只是想通了這一點:

而不是在我列入模板使用{{ STATIC_URL }},我用從static模板標籤get_static_prefix標籤:

update_line.html

{% load static %} 

<tr><td class="update">{{ update }}</td><td class="ack"> 
<img id="update-{{ update.pk }}" class="ack-img" src="{% get_static_prefix %}img/acknowledge.png" alt="Acknowledge" /></td></tr> 

更新

我相信現在正確的方式做到這一點(Django的1.5+)是:

update_line.html

{% load staticfiles %} 

<tr><td class="update">{{ update }}</td><td class="ack"> 
<img id="update-{{ update.pk }}" class="ack-img" src="{% static 'my_app/img/acknowledge.png' %}" alt="Acknowledge" /></td></tr> 
+0

我想這是因爲上下文處理器不適用於手動呈現的模板(或使用包含模板標記呈現)。今天我學到了。 – dgel 2011-03-28 10:45:43

+1

使用Django 1.7,它也可以使用'{%load static%}' – spg 2015-08-26 12:52:45

2

內,您的模板標籤代碼,你可以做你喜歡什麼:所以你可以自行從settings輕鬆導入STATIC_URL

+1

是的,我知道這是一個選項,但我想知道是否有更好的方法來做到這一點(不是那樣做不好)。我決定改用'static'中的'get_static_prefix'模板標籤。不知何故,感覺更django式。 – dgel 2011-03-28 10:59:03