全局加载 Django“静态”模板标签库,而不在每个文件中显式加载它

Posted

技术标签:

【中文标题】全局加载 Django“静态”模板标签库,而不在每个文件中显式加载它【英文标题】:Load Django "static" template tag library globally without explicitly loading it in every file 【发布时间】:2013-09-13 15:00:03 【问题描述】:

我想像这样在模板中使用静态标签:

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

我发现这需要我输入

% load static %

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

在我的设置中我确实有:

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

我看到了这两个问题: Make django static tag globally available 和 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')

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

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

【问题讨论】:

【参考方案1】:

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

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

所以使用基本的默认设置应该如下所示:

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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“静态”模板标签库,而不在每个文件中显式加载它的主要内容,如果未能解决你的问题,请参考以下文章

Django全局静态文件未加载

Django:您是不是需要使用特定文件夹名称命名标签库(模板、静态等)?

在视图而不是模板中生成带有 Django 静态 url 的图像标签

在 runserver 中导入但不在 wsgi 上的模板标签

Django 1.10 模板语法错误。您是不是忘记注册或加载此标签?

如何在 django 中提供图像而不在 django 中使用 <img> 标签?