全局加载 Django "static"模板标签库,而无需在每个文件中显式加载它



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

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

发现这需要我把

{% load static %}

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

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

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

我看到了这两个问题:使 django 静态标签全局可用和默认为所有视图加载 Django 模板标签库尽管似乎都没有回答这个问题。 在前者中,问题不清楚,在后者中,当我尝试使用时,我会收到错误:

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

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

如何自动将静态标签添加到所有模板文件中,而无需为每个文件显式加载静态标签?

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

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

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

django.core.context_processors.static替换为django.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_bultins替换为add_to_builtins

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

在 settings.py 在模板下添加"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

最新更新