2011-03-28 70 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