从自定义包含模板标记中访问STATIC_URL

时间:2011-03-28 10:35:48

标签: django django-templates

我创建了一个自定义inclusion template tag,它接受​​一个Update模型对象。

模板标记:

@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而不做一些令人讨厌的事情,比如手动从设置中获取并明确地将其作为上下文变量传递?

2 个答案:

答案 0 :(得分:14)

好。在发布问题之后刚想出来:

我没有在包含模板中使用{{ STATIC_URL }},而是使用get_static_prefix模板标记中的static标记:

<强> 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>

答案 1 :(得分:2)

在模板标记代码中,您可以执行您喜欢的操作:因此您可以自己轻松地从STATIC_URL导入settings