3

我想在模板中使用静态标签,如下所示:

<img src="{% static "img/test.jpg" %}">

我发现这需要我把

{% load static %}

在每个模板文件的开头。由于我在任何地方都在使用它,我希望它是一个全局可用的标签,所以我不需要放置 {% load static %} 来使用它。

在我的设置中,我确实有:

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.static',
)

我看到了这两个问题: Make django static tag global available and Load a Django template tag library for all views by default 尽管似乎都没有回答这个问题。在前者中,问题不清楚,而在后者中,当我尝试使用时出现错误:

from django.template.loader import add_to_builtins
add_to_builtins('django.core.context_processors.static')

也许我没有把它放在正确的位置,或者它已经是核心的一部分所以不起作用?

如何在不为每个文件显式加载的情况下自动将静态标签添加到所有模板文件中?

4

3 回答 3

4

我认为很多答案都忘记了您需要将代码放在哪里。好吧,让我首先告诉您,您可以使用以下代码来完成工作:

from django.template.loader import add_to_builtins
add_to_builtins('django.templatetags.static')

现在把它放在你的主urls.py文件中。这对我有用。

于 2013-09-10T03:00:08.317 回答
2

替换django.core.context_processors.staticdjango.templatetags.static

>>> from django.template import Context,Template
>>> from django.template.loader import add_to_builtins
>>> add_to_builtins('django.templatetags.static')
>>> Template('{% static "img/test.jpg" %}').render(Context())
'/static/img/test.jpg'

顺便说一句,您的代码有一个错字:替换add_to_bultinsadd_to_builtins.

于 2013-09-10T02:54:56.310 回答
0

答案很旧,在 Django 3 中不起作用

在 settings.py 在 TEMPLATES -> OPTIONS -> builtins 下添加 'django.templatetags.static'

因此,使用基本的默认设置,它应该如下所示:

TEMPLATES = [
    {
        'BACKEND': ...,
        'DIRS': ...,
        'OPTIONS': {
            'context_processors': [
                ...
            ],
            'builtins': [
                'django.templatetags.static',
            ],
        },
    },
]

感谢博客:https ://chris-lamb.co.uk/posts/importerror-cannot-import-name-add_to_builtins-under-django-19

于 2020-04-06T10:15:56.690 回答