【问题标题】:Access STATIC_URL from within a custom inclusion template tag从自定义包含模板标记中访问 STATIC_URL
【发布时间】:2011-07-24 09:14:27
【问题描述】:

我创建了一个自定义 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,而无需做一些讨厌的事情,比如从设置中手动获取它并将其作为上下文变量显式传递?

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    好的。发布问题后才发现这一点:

    我没有在我的包含模板中使用{{ 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>
    

    【讨论】:

    • 我猜这是因为上下文处理器没有应用于手动呈现的模板(或使用包含模板标签呈现)。今天我学会了。
    • 对于 Django 1.7,它也可以使用 {% load static %}
    【解决方案2】:

    在你的模板标签代码中,你可以做你喜欢的事情:这样你就可以很容易地自己从settings导入STATIC_URL

    【讨论】:

    • 是的,我知道这是一个选择,但我想知道是否有更好的方法来做到这一点(并不是说这是一个坏方法)。我决定改用来自staticget_static_prefix 模板标签。不知何故,感觉更像 django-esque。
    猜你喜欢
    • 2011-08-10
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 2017-03-09
    相关资源
    最近更新 更多